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:
- Bezbednost: Sprečavaju slučajnu promenu stanja objekta.
- Korišćenje sa konstantnim objektima: Konstantni objekti (deklarisani sa
const) mogu pozivati samo konstantne metode. Nekonstantne metode im nisu dostupne. - 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.