Wat weet je over constante en niet-constante methoden?
sobes.tech AI
Antwoord van AI
De constante methoden (const methods) in C++ zijn klasse-methoden die worden gedeclareerd met het sleutelwoord const na de lijst met parameters.
class MyClass {
public:
void nonConstMethod(); // Niet-constante methode
void constMethod() const; // Constante methode
};
Het sleutelwoord const na de lijst met parameters garandeert dat de methode de toestand van het object waarop het wordt aangeroepen niet zal wijzigen. Dit betekent dat binnen een constante methode:
- Niet-statische datalleden van het object niet kunnen worden gewijzigd.
- Alleen andere constante methoden van hetzelfde object kunnen worden aangeroepen.
Doel van constante methoden:
- Veiligheid: Voorkomen van per ongeluk wijzigen van de toestand van het object.
- Gebruik met constante objecten: Constante objecten (aangekondigd met
const) kunnen alleen constante methoden aanroepen. Niet-constante methoden zijn niet toegankelijk voor hen. - Overbelasting: Methoden kunnen worden overbelast op basis van constantheid. Dit maakt het mogelijk om twee methoden met dezelfde naam en parametersignatuur te hebben, maar één zal constant zijn en de andere niet. De compiler kiest de juiste versie op basis van of de methode wordt aangeroepen op een constant of niet-constant object.
class MyClass {
int value;
public:
int getValue() const { // Constante versie
return value;
}
int getValue() { // Niet-constante versie
return value++; // Mogelijkheid om de toestand te wijzigen
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Wordt de const-versie aangeroepen
objNonConst.getValue(); // Wordt de non-const-versie aangeroepen
}
Niet-constante methoden:
Dit zijn normale methoden van de klasse die de toestand van het object kunnen wijzigen. Ze worden gedeclareerd zonder het sleutelwoord const na de lijst met parameters.
Gebruik:
| Objecttype | Methode-aanroep | Welke methode wordt aangeroepen | Uitleg |
|---|---|---|---|
const T |
obj.method() |
Alleen de constante versie | Kan de toestand van het constante object niet wijzigen. |
T |
obj.method() |
Niet-constante methode | Kan de toestand wijzigen. |
T |
obj.method() const |
Constante versie | Als beide versies bestaan en wordt aangeroepen op een niet-constant object, heeft de niet-constante versie prioriteit. Maar het is mogelijk om expliciet te casten, als je de constante versie wilt aanroepen (zelden gebruikt). |
Het gebruik van constantheid is een goede praktijk, omdat het de leesbaarheid en veiligheid van de code verbetert, en het de compiler in staat stelt om extra optimalisaties uit te voeren.