Junior
Čo viete o konštantných a nekonštantných metódach?
sobes.tech AI
Odpoveď od AI
Konštantné metódy (const methods) v C++ sú metódy triedy, ktoré sú deklarované s kľúčovým slovom const za zoznamom parametrov.
class MyClass {
public:
void nonConstMethod(); // Nekonštantná metóda
void constMethod() const; // Konštantná metóda
};
Kľúčové slovo const za zoznamom parametrov zaručuje, že metóda nezmení stav objektu, na ktorý je volaná. To znamená, že vo vnútri konštantnej metódy:
- Nie je možné meniť nestatické členy dát objektu.
- Môže sa volať iba iné konštantné metódy toho istého objektu.
Účel konštantných metód:
- Bezpečnosť: Predchádzajú náhodnej zmene stavu objektu.
- Použitie s konštantnými objektmi: Konštantné objekty (deklarované s
const) môžu volať iba konštantné metódy. Nekonštantné metódy im nie sú dostupné. - Preťaženie: Metódy môžu byť preťažené podľa konštantnosti. To umožňuje mať dve metódy so rovnakým menom a signatúrou parametrov, ale jedna bude konštantná a druhá nekonštantná. Kompilátor vyberie verziu v závislosti od toho, či je metóda volaná na konštantnom alebo nekonštantnom objekte.
class MyClass {
int value;
public:
int getValue() const { // Konštantná verzia
return value;
}
int getValue() { // Nekonštantná verzia
return value++; // Možnosť zmeny stavu
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Volá sa konštantná verzia
objNonConst.getValue(); // Volá sa nekonštantná verzia
}
Nekonštantné metódy:
Sú to bežné metódy triedy, ktoré môžu meniť stav objektu. Deklarujú sa bez kľúčového slova const za zoznamom parametrov.
Použitie:
| Typ objektu | Volanie metódy | Ktorá metóda bude volať | Vysvetlenie |
|---|---|---|---|
const T |
obj.method() |
Iba konštantná | Nie je možné meniť stav konštantného objektu. |
T |
obj.method() |
Nekonštantná (ak je) | Nekonštantné metódy môžu meniť stav. |
T |
obj.method() const |
Konštantná (ak je) | Ak sú obe verzie a je volané na nekonštantnom objekte, prioritu má nekonštantná. Ale možno výslovne volať konštantnú verziu, ak je potrebné (zriedka používané). |
Používanie konštantnosti je dobrou praxou, pretože zvyšuje čitateľnosť a bezpečnosť kódu, a tiež umožňuje kompilátoru vykonávať ďalšie optimalizácie.