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:
- Bezpečnost: Předcházejí náhodné změně stavu objektu.
- Použití s konstantními objekty: Konstantní objekty (deklarované s
const) mohou volat pouze konstantní metody. Nekonstantní metody jim nejsou dostupné. - 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.