Sobes.tech
Junior

Mida teate konstantsete ja mittekonstantsete meetodite kohta?

sobes.tech AI

Vastus AI-lt

Konstantse meetodid (const methods) C++-s on klassi meetodid, mis on deklareeritud võtmesõnaga const pärast parameetrite loendit.

class MyClass {
public:
    void nonConstMethod();         // Mitte-konstantne meetod
    void constMethod() const;      // Konstantne meetod
};

Võtmesõna const pärast parameetrite loendit tagab, et meetod ei muuda objekti olekut, millele see on kutsutud. See tähendab, et konstantse meetodi sees:

  • Ei tohi muuta objekti mitte-staatilisi andmejäsene.
  • Võib kutsuda ainult teisi konstantseid meetodeid sama objekti kohta.

Konstantsete meetodite eesmärk:

  1. Turvalisus: Takistab juhuslikku objekti oleku muutmist.
  2. Kasutamine konstantsete objektidega: Konstantseid objekte (deklaratsiooniga const) saavad kutsuda ainult konstantseid meetodeid. Mitte-konstantseid meetodeid neile ei anta ligipääsu.
  3. Ülekoormus: Meetodid võivad olla ülekoormatud konstantse ja mitte-konstantse versiooni vahel. See võimaldab omada kahte meetodit sama nime ja signatuuriga, kuid üks neist on konstantne ja teine mitte-konstantne. Kompilaatör valib versiooni sõltuvalt sellest, kas meetod kutsutakse konstantse või mitte-konstantse objekti pealt.
class MyClass {
    int value;
public:
    int getValue() const { // Konstantne versioon
        return value;
    }
    int getValue() {       // Mitte-konstantne versioon
        return value++;    // Võimalus muuta olekut
    }
};

void test(const MyClass& objConst, MyClass& objNonConst) {
    objConst.getValue();    // Kutsutakse konstantset versiooni
    objNonConst.getValue(); // Kutsutakse mitte-konstantset versiooni
}

Mitte-konstantsed meetodid:

Need on tavalised klassi meetodid, mis võivad muuta objekti olekut. Need deklareeritakse ilma const võtmesõnata pärast parameetrite loendit.

Kasutamine:

Objekti tüüp Meetodi kutsumine Milline meetod kutsutakse Selgitus
const T obj.method() Ainult konstantne Ei tohi muuta konstantse objekti olekut
T obj.method() Mitte-konstantne (kui on) Mitte-konstantsed meetodid võivad muuta olekut
T obj.method() const Konstantne (kui on) Kui mõlemad versioonid on olemas ja kutsutakse mitte-konstantse objekti pealt, eelistatakse mitte-konstantset. Kuid saab ka selgelt välja kutsuda konstantse versiooni, kui vaja (harva kasutatav).

Konstantse kasutamine on hea tava, kuna see suurendab koodi loetavust ja turvalisust ning võimaldab kompilaatoril teha täiendavaid optimeerimisi.