C++ Academy · leksjon

const-medlemsfunksjoner

Marker skrivebeskyttede metoder

Leksjon 2 av 413 trinn

const-medlemsfunksjoner er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva en const-medlemsfunksjon er

En medlemsfunksjon som er merket med const, lover å ikke endre objektets observerbare tilstand. Nøkkelordet plasseres etter 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 kaller const-metoder

På et const-objekt kan du bare kalle const-medlemsfunksjoner. Ikke-const-metoder er ikke tillatt.

#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 blir const

Inne i en const-medlemsfunksjon er this en peker til const, så kompilatoren avviser alle forsøk på å endre medlemmer.

Merk alle skrivebeskyttede metoder med const

Gettere, spørringsmetoder og utskriftsmetoder bør alle være const. Da kan de brukes på const-objekter og const-referanser.

const-overlagring

Du kan tilby både en const- og en ikke-const-versjon av en metode. Kompilatoren velger basert på 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økkelordet mutable

mutable-medlemmer kan endres selv inne i en const-metode – nyttig for hurtigbuffere eller tellere som ikke er en del av den logiske tilstanden.

#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 og fysisk const

const beskytter objektets logiske tilstand, mens mutable lar implementasjonsdetaljer som hurtigbuffere endres uten å bryte dette løftet.

const-metoder og const-referanser

En funksjon som mottar en const&, kan bare kalle const-metoder på objektet – enda en grunn til å merke spørringsmetoder med 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); }

Returnere const-referanser

Const-aksessorer returnerer ofte const& for å eksponere medlemmer uten å tillate endring eller kopiering.

Ikke fjern const

Hvis du bruker const_cast til å endre et objekt som faktisk er const, får du udefinert oppførsel. Bruk heller mutable for legitime unntak.

const-korrekte klasser

En godt utformet klasse merker alle metoder som ikke endrer tilstanden, med const, slik at den fungerer sømløst i const-kontekster i hele programmet.

Hurtigsjekk

Test forståelsen din av const-medlemsfunksjoner.

Oppsummering

Du har lært å merke skrivebeskyttede metoder med const, at const-objekter bare kaller const-metoder, hvordan du overlagrer på grunnlag av const, og hvordan mutable tillater endringer i implementasjonsdetaljer. Unngå const_cast, og utform const-korrekte klasser fra starten.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «const-medlemsfunksjoner» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «const-medlemsfunksjoner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «const-medlemsfunksjoner»?

Marker skrivebeskyttede metoder Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «const-medlemsfunksjoner»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. const-variabler og -parametere
  2. const-medlemsfunksjoner
  3. constexpr og kompileringstid
  4. consteval og constinit
← Tilbake til C++ Academy