Sobes.tech
Junior

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:

  1. Veiligheid: Voorkomen van per ongeluk wijzigen van de toestand van het object.
  2. Gebruik met constante objecten: Constante objecten (aangekondigd met const) kunnen alleen constante methoden aanroepen. Niet-constante methoden zijn niet toegankelijk voor hen.
  3. 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.