Suche…


Bemerkungen

Was bedeutet "const-Memberfunktionen" einer Klasse wirklich? Die einfache Definition scheint zu sein, dass eine const-Member-Funktion das Objekt nicht ändern kann. Was aber "kann sich nicht ändern" bedeutet hier wirklich. Es bedeutet einfach, dass Sie keine Zuordnung für Klassendatenelemente vornehmen können.

Sie können jedoch auch andere indirekte Vorgänge ausführen, beispielsweise das Einfügen eines Eintrags in eine Karte (siehe Beispiel). Wenn Sie dies zulassen, könnte dies so aussehen, als würde die const-Funktion das Objekt ändern (ja, in gewissem Sinne), aber es ist erlaubt.

Die eigentliche Bedeutung ist also, dass eine const-Member-Funktion keine Zuordnung für die Klassendatenvariablen durchführen kann. Aber es kann andere Dinge tun, wie im Beispiel erklärt.

konstante Mitgliederfunktion

#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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow