Sobes.tech
Junior

Co víte o konstantních a nekonstantních metodách?

sobes.tech AI

Odpověď od AI

Konstantní metody (const methods) v C++ jsou metody třídy, které jsou deklarovány klíčovým slovem const za seznamem parametrů.

class MyClass {
public:
    void nonConstMethod();         // Nekonstantní metoda
    void constMethod() const;      // Konstantní metoda
};

Klíčové slovo const za seznamem parametrů zaručuje, že metoda nezmění stav objektu, na který je volána. To znamená, že uvnitř konstantní metody:

  • Nelze měnit nestatické členy dat objektu.
  • Lze volat pouze jiné konstantní metody téhož objektu.

Účel konstantních metod:

  1. Bezpečnost: Předcházejí náhodné změně stavu objektu.
  2. Použití s konstantními objekty: Konstantní objekty (deklarované s const) mohou volat pouze konstantní metody. Nekonstantní metody jim nejsou dostupné.
  3. Přetížení: Metody mohou být přetíženy podle konstantnosti. To umožňuje mít dvě metody se stejným jménem a signaturou parametrů, ale jedna bude konstantní a druhá nekonstantní. Kompilátor vybere verzi podle toho, zda je metoda volána na konstantním nebo nekonstantním objektu.
class MyClass {
    int value;
public:
    int getValue() const { // Konstantní verze
        return value;
    }
    int getValue() {       // Nekonstantní verze
        return value++;    // Možnost změny stavu
    }
};

void test(const MyClass& objConst, MyClass& objNonConst) {
    objConst.getValue();    // Volá se konstantní verze
    objNonConst.getValue(); // Volá se nekonstantní verze
}

Nekonstantní metody:

Jsou to běžné metody třídy, které mohou měnit stav objektu. Deklarují se bez klíčového slova const za seznamem parametrů.

Použití:

Typ objektu Volání metody Která metoda bude volána Vysvětlení
const T obj.method() Pouze konstantní Nelze měnit stav konstantního objektu.
T obj.method() Nekonstantní (pokud je) Nekonstantní metody mohou měnit stav.
T obj.method() const Konstantní (pokud je) Pokud jsou obě verze a je voláno na nekonstantním objektu, dává přednost nekonstantní. Ale lze výslovně přivést objekt, pokud je třeba volat konstantní verzi (zřídka používané).

Používání konstantnosti je dobrou praxí, protože zvyšuje čitelnost a bezpečnost kódu, a také umožňuje překladači provádět další optimalizace.