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:
- Turvalisus: Takistab juhuslikku objekti oleku muutmist.
- Kasutamine konstantsete objektidega: Konstantseid objekte (deklaratsiooniga
const) saavad kutsuda ainult konstantseid meetodeid. Mitte-konstantseid meetodeid neile ei anta ligipääsu. - Ü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.