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

  1. Siguranță: Previn modificări accidentale ale stării obiectului.
  2. Utilizare cu obiecte constante: Obiectele constante (declarate cu const) pot apela doar metode constante. Metodele non- constante nu sunt accesibile pentru ele.
  3. 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.