Junior
Ce știi despre metodele constante și cele neconstante?
sobes.tech AI
Răspuns de la AI
Metodele constante (const methods) în C++ sunt metode de clasă declarate cu cuvântul cheie const după lista de parametri.
class MyClass {
public:
void nonConstMethod(); // Metodă non-constantă
void constMethod() const; // Metodă constantă
};
Cuvântul cheie const după lista de parametri garantează că metoda nu va modifica starea obiectului pe care este apelată. Aceasta înseamnă că în interiorul unei metode constante:
- Nu se pot modifica membrii de date non-staționali ai obiectului.
- Se pot apela doar alte metode constante ale aceluiași obiect.
Scopul metodelor constante:
- Siguranță: Previn modificări accidentale ale stării obiectului.
- Utilizare cu obiecte constante: Obiectele constante (declarate cu
const) pot apela doar metode constante. Metodele non- constante nu sunt accesibile pentru ele. - Supraincarcare: Metodele pot fi supraincarcate după constanță. Acest lucru permite să aveți două metode cu același nume și semnătură de parametri, dar una va fi constantă și cealaltă nu. Compilatorul va alege versiunea potrivită în funcție de dacă metoda este apelată pe un obiect constant sau nu.
class MyClass {
int value;
public:
int getValue() const { // Versiune constantă
return value;
}
int getValue() { // Versiune non-constantă
return value++; // Posibilitatea de a modifica starea
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Se apelează versiunea const
objNonConst.getValue(); // Se apelează versiunea non-const
}
Metodele non- constante:
Acestea sunt metode normale ale clasei, care pot modifica starea obiectului. Sunt declarate fără cuvântul cheie const după lista de parametri.
Utilizare:
| Tipul obiectului | Apelul metodei | Ce metodă va fi apelată | Explicație |
|---|---|---|---|
const T |
obj.method() |
Doar versiunea constantă | Nu se poate modifica starea obiectului constant. |
T |
obj.method() |
Metoda non-constantă | Poate modifica starea. |
T |
obj.method() const |
Versiunea constantă | Dacă ambele versiuni există și se face apel pe un obiect ne-constant, prioritatea o are versiunea non-constant. Dar se poate face explicit un cast dacă se dorește apelarea versiunii constante (rar). |
Utilizarea constanței este o practică bună, deoarece îmbunătățește lizibilitatea și siguranța codului, precum și permite compilatorului să efectueze optimizări suplimentare.