C++
Constante klassenlidfuncties
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