Junior
Ko jūs zināt par konstantiem un nekonstantiem metodēm?
sobes.tech AI
Atbilde no AI
Konstantās metodes (const methods) C++ ir klases metodes, kuras ir deklarētas ar atslēgas vārdu const pēc parametru saraksta.
class MyClass {
public:
void nonConstMethod(); // Nekonstanta metode
void constMethod() const; // Konstanta metode
};
Atslēgas vārds const pēc parametru saraksta garantē, ka metode nemainīs objekta stāvokli, kuram tā ir izsaukta. Tas nozīmē, ka iekšā konstantajā metodē:
- Nav atļauts mainīt nestatiskos datu locekļus.
- Var izsaukt tikai citas konstantās metodes tā paša objekta.
Konstantu metožu mērķis:
- Drošība: Novērš nejaušu objekta stāvokļa maiņu.
- Izmantošana ar konstantiem objektiem: Konstanti objekti (deklarēti ar
const) var izsaukt tikai konstantās metodes. Nekonstanti metodes tiem nav pieejamas. - Pārlādēšana: Metodes var būt pārlādētas pēc konstantiem. Tas ļauj būt divām metodēm ar vienu un to pašu nosaukumu un parametru signatūru, bet viena būs konstanta, bet otra — nekonstanta. Kompilators izvēlēsies versiju atkarībā no tā, vai metode ir izsaukta uz konstanta vai nekonstanta objekta.
class MyClass {
int value;
public:
int getValue() const { // Konstanta versija
return value;
}
int getValue() { // Nekonstanta versija
return value++; // Izmaiņu iespēja
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Izsauc konstanta versiju
objNonConst.getValue(); // Izsauc nekonstanta versiju
}
Nekonstanta metodes:
Tie ir parasti klases metodes, kas var mainīt objekta stāvokli. Tās tiek deklarētas bez const atslēgas vārda pēc parametru saraksta.
Izmantošana:
| Objekta tips | Metodes izsaukums | Kurš metodes tiks izsaukts | Paskaidrojums |
|---|---|---|---|
const T |
obj.method() |
Tikai konstanta | Nav atļauts mainīt konstanta objekta stāvokli |
T |
obj.method() |
Nekonstanta (ja ir) | Nekonstanta metodes var mainīt stāvokli |
T |
obj.method() const |
Konstanta (ja ir) | Ja ir abas versijas un tiek izsaukts uz nekonstanta objekta, prioritāte ir nekonstanta. Bet var tieši izsaukt konstanta versiju, ja nepieciešams (retāk lietots). |
Konstantu lietošana ir laba prakse, jo tā palielina koda lasāmību un drošību, kā arī ļauj kompilatoram veikt papildu optimizācijas.