const-medlemsfunktioner
Markér skrivebeskyttede metoder
const-medlemsfunktioner er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad en const-medlemsfunktion er
En medlemsfunktion, der er markeret med const, lover ikke at ændre objektets observerbare tilstand. Nøgleordet placeres efter parameterlisten.
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; } // read-only
void inc() { ++n; }
};
int main() {
Counter c;
c.inc();
std::cout << c.value() << "\n";
}const-objekter kalder const-metoder
På et const-objekt må du kun kalde const-medlemsfunktioner. Ikke-const-metoder er ikke tilladt.
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; }
void inc() { ++n; }
};
int main() {
const Counter c;
std::cout << c.value() << "\n"; // OK
// c.inc(); // ERROR
}this bliver const
Inde i en const-medlemsfunktion er this en pointer til const, så compileren afviser ethvert forsøg på at ændre medlemsvariabler.
Markér alle skrivebeskyttede metoder med const
Gettere, forespørgsler og udskrivningsfunktioner bør alle være const. Så kan de bruges på const-objekter og const-referencer.
Overbelastning med const
Du kan tilbyde både en const- og en ikke-const-version af en metode; compileren vælger ud fra, om objektet er const.
#include <iostream>
#include <vector>
class Box {
std::vector<int> v{1, 2, 3};
public:
int& at(int i) { return v[i]; } // mutable access
const int& at(int i) const { return v[i]; } // read-only access
};
int main() {
Box b;
b.at(0) = 99;
std::cout << b.at(0) << "\n";
}Nøgleordet mutable
mutable-medlemsvariabler må ændres selv inde i en const-metode — det er nyttigt til cachen eller tællere, der ikke er en del af den logiske tilstand.
#include <iostream>
class Cache {
mutable int hits = 0;
int data = 42;
public:
int get() const { ++hits; return data; } // hits is mutable
int hitCount() const { return hits; }
};
int main() {
Cache c;
c.get(); c.get();
std::cout << c.hitCount() << "\n";
}Logisk kontra fysisk const
const beskytter objektets logiske tilstand; mutable lader implementeringsdetaljer som cachen ændre sig uden at bryde dette løfte.
const-metoder og const-referencer
En funktion, der modtager en const&, kan kun kalde const-metoder på den — endnu en grund til at markere forespørgsler som const.
#include <iostream>
class Counter {
int n = 5;
public:
int value() const { return n; }
};
void report(const Counter& c) {
std::cout << c.value() << "\n"; // needs value() to be const
}
int main() { Counter c; report(c); }Returnering af const-referencer
Const-accessorer returnerer ofte const& for at eksponere medlemsvariabler uden at tillade ændringer eller kopiering.
Fjern ikke const med en cast
Hvis du bruger const_cast til at ændre et reelt const-objekt, er adfærden udefineret. Brug i stedet mutable til legitime undtagelser.
const-korrekte klasser
En veldesignet klasse markerer alle metoder, der ikke ændrer tilstanden, med const, så den fungerer problemfrit i const-kontekster i hele programmet.
Hurtig kontrol
Test din forståelse af const-medlemsfunktioner.
Opsummering
Du har lært at markere skrivebeskyttede metoder med const, at const-objekter kun kalder const-metoder, hvordan du overbelaster på const, og hvordan mutable tillader ændringer af implementeringsdetaljer. Undgå const_cast, og udform klasser const-korrekt fra starten.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “const-medlemsfunktioner” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “const-medlemsfunktioner”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “const-medlemsfunktioner”?
Markér skrivebeskyttede metoder Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “const-medlemsfunktioner”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- const-variabler og -parametre
- const-medlemsfunktioner
- constexpr og kompileringstid
- consteval og constinit