Sök…


Anmärkningar

Vad betyder egentligen "const medlemsfunktioner" i en klass. Den enkla definitionen verkar vara att en const-medlemsfunktion inte kan ändra objektet. Men vad som "inte kan förändras" betyder verkligen här. Det betyder helt enkelt att du inte kan göra en uppgift för medlemmar av klassdata.

Du kan dock göra andra indirekta operationer som att infoga en post på en karta som visas i exemplet. Att tillåta detta kan se ut som denna const-funktion är att ändra objektet (ja, det gör det i en mening), men det är tillåtet.

Så, den verkliga betydelsen är att en const-medlemsfunktion inte kan göra en tilldelning för klassdatavariablerna. Men det kan göra andra saker som förklaras i exemplet.

konstant medlemsfunktion

#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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow