Sobes.tech
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:

  1. Bezpečnosť: Predchádzajú náhodnej zmene stavu objektu.
  2. 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é.
  3. 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.