Zoeken…


Opmerkingen

Wat betekent 'const member-functies' van een klasse eigenlijk? De eenvoudige definitie lijkt te zijn dat een const-lidfunctie het object niet kan veranderen. Maar wat 'kan niet veranderen' betekent hier echt. Het betekent simpelweg dat u geen opdracht kunt doen voor groepsgegevensleden.

U kunt echter ook andere indirecte bewerkingen uitvoeren, zoals het invoegen van een vermelding in een kaart, zoals in het voorbeeld. Als je dit toestaat, kan het lijken alsof deze const-functie het object wijzigt (ja, in zekere zin wel), maar het is toegestaan.

De echte betekenis is dus dat een const-lidfunctie geen toewijzing kan doen voor de klassengegevensvariabelen. Maar het kan andere dingen doen, zoals uitgelegd in het voorbeeld.

constante ledenfunctie

#include <iostream>
#include <map>
#include <string>

using namespace std;

class A {
public:
    map<string, string> * mapOfStrings;
public:
    A() {
        mapOfStrings = new map<string, string>();
    }

    void insertEntry(string const & key, string const & value) const {
        (*mapOfStrings)[key] = value;             // This works? Yes it does. 
        delete mapOfStrings;                      // This also works
        mapOfStrings = new map<string, string>(); // This * does * not work
    }

    void refresh() {
        delete mapOfStrings;
        mapOfStrings = new map<string, string>(); // Works as refresh is non const function
    }

    void getEntry(string const & key) const {
        cout << mapOfStrings->at(key);
    }
};

int main(int argc, char* argv[]) {

    A var;
    var.insertEntry("abc", "abcValue");
    var.getEntry("abc");
    getchar();
    return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow