Szukaj…


Uwagi

Co tak naprawdę oznacza „stałe funkcje składowe” klasy. Wydaje się, że prosta definicja jest taka, że stała funkcja członka nie może zmienić obiektu. Ale to, co „nie można zmienić” tak naprawdę oznacza tutaj. Oznacza to po prostu, że nie można wykonać zadania dla członków danych klasy.

Możesz jednak wykonywać inne pośrednie operacje, takie jak wstawianie wpisu na mapie, jak pokazano w przykładzie. Dopuszczenie tego może wyglądać, jak ta funkcja const modyfikuje obiekt (tak, robi to w pewnym sensie), ale jest dozwolona.

Tak więc, prawdziwe znaczenie jest takie, że stała funkcja członka nie może wykonać przypisania do zmiennych danych klasy. Ale może robić inne rzeczy, jak wyjaśniono w przykładzie.

stała funkcja członka

#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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow