Sobes.tech
Junior

Šta znate o konstantnim i nekonstantnim metodama?

sobes.tech АИ

Одговор од АИ

Konstantne metode (const methods) u C++ su metode klase koje su deklarisane sa ključnom rečju const nakon spiska parametara.

class MyClass {
public:
    void nonConstMethod();         // Nekonstantna metoda
    void constMethod() const;      // Konstantna metoda
};

Ključna reč const nakon spiska parametara garantuje da metoda neće menjati stanje objekta na koji je pozvana. To znači da unutar konstantne metode:

  • Nije dozvoljeno menjanje nestatističkih članova podataka objekta.
  • Može se pozivati samo druge konstantne metode istog objekta.

Svrha konstantnih metoda:

  1. Bezbednost: Sprečavaju slučajnu promenu stanja objekta.
  2. Korišćenje sa konstantnim objektima: Konstantni objekti (deklarisani sa const) mogu pozivati samo konstantne metode. Nekonstantne metode im nisu dostupne.
  3. Preopterećenje: Metode mogu biti preopterećene po pitanju konstantnosti. To omogućava da postoje dve metode sa istim imenom i potpisom parametara, ali jedna će biti konstantna, a druga nekonstantna. Kompilator će izabrati verziju u zavisnosti od toga da li se metoda poziva na konstantnom ili nekonstantnom objektu.
class MyClass {
    int value;
public:
    int getValue() const { // Konstantna verzija
        return value;
    }
    int getValue() {       // Nekonstantna verzija
        return value++;    // Mogućnost promene stanja
    }
};

void test(const MyClass& objConst, MyClass& objNonConst) {
    objConst.getValue();    // Poziva se konstantna verzija
    objNonConst.getValue(); // Poziva se nekonstantna verzija
}

Nekonstantne metode:

To su obične metode klase koje mogu menjati stanje objekta. Deklarisu se bez ključne reči const nakon spiska parametara.

Korišćenje:

Tip objekta Poziv metode Koja metoda će biti pozvana Objašnjenje
const T obj.method() Samo konstantna Nije dozvoljeno menjanje stanja konstantnog objekta.
T obj.method() Nekonstantna (ako postoji) Nekonstantne metode mogu menjati stanje.
T obj.method() const Konstantna (ako postoji) Ako postoje obe verzije i poziva se na nekonstantnom objektu, prioritet ima nekonstantna. Ali može se eksplicitno pozvati konstantna verzija ako je potrebno (retko se koristi).

Korišćenje konstantnosti je dobra praksa, jer povećava čitljivost i sigurnost koda, kao i omogućava kompilatoru da vrši dodatne optimizacije.