0Pricing
C++ Academy · Lekcja

Funkcje składowe const

Oznaczaj metody tylko do odczytu

Funkcje składowe const to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Czym jest funkcja składowa const

Funkcja składowa oznaczona jako const gwarantuje, że nie zmodyfikuje obserwowalnego stanu obiektu. Słowo kluczowe umieszcza się za listą parametrów.

#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";
}

Obiekty const wywołują metody const

Na obiekcie const można wywoływać wyłącznie funkcje składowe const. Metody nie-const są niedozwolone.

#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 staje się const

W funkcji składowej const this jest wskaźnikiem do const, dlatego kompilator odrzuca każdą próbę zmodyfikowania składowych.

Oznaczaj każdą metodę tylko do odczytu jako const

Akcesory, metody zapytań i metody drukujące powinny być oznaczone jako const. Dzięki temu mogą działać na obiektach const i referencjach const.

Przeciążanie const

Można udostępnić zarówno const, jak i nie-const wersję metody; kompilator wybiera odpowiednią wersję na podstawie tego, czy obiekt jest 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";
}

Słowo kluczowe mutable

Składowe mutable mogą zmieniać się nawet wewnątrz metody const — jest to przydatne w przypadku pamięci podręcznych lub liczników, które nie są częścią stanu logicznego.

#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";
}

Poprawność logiczna a fizyczna const

const chroni logiczny stan obiektu, natomiast mutable pozwala zmieniać szczegóły implementacji, takie jak pamięci podręczne, bez naruszania tej gwarancji.

Metody const i referencje const

Funkcja otrzymująca argument typu const& może wywoływać na nim wyłącznie metody const — to kolejny powód, aby metody zapytań oznaczać jako 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); }

Zwracanie referencji const

Akcesory const często zwracają const&, aby udostępnić składowe bez zezwalania na ich modyfikowanie i bez kopiowania.

Nie usuwaj const rzutowaniem

Użycie const_cast do zmodyfikowania rzeczywiście stałego obiektu prowadzi do niezdefiniowanego zachowania. W uzasadnionych wyjątkach należy zamiast tego użyć mutable.

Klasy zgodne z const

Dobrze zaprojektowana klasa oznacza każdą metodę, która nie modyfikuje obiektu, jako const, dzięki czemu klasa działa bezproblemowo w kontekstach const w całym programie.

Szybki test

Sprawdź swoją wiedzę na temat funkcji składowych const.

Podsumowanie

Dowiedział się Pan, jak oznaczać metody tylko do odczytu jako const, że obiekty const mogą wywoływać wyłącznie metody const, jak przeciążać metody ze względu na const oraz jak mutable umożliwia modyfikowanie szczegółów implementacji. Należy unikać const_cast i od początku projektować klasy zgodnie z zasadami const.

Często zadawane pytania

Czy lekcja „Funkcje składowe const” jest bezpłatna?

Tak — pełny tekst „Funkcje składowe const” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Funkcje składowe const”?

Oznaczaj metody tylko do odczytu Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Funkcje składowe const”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zmienne i parametry const
  2. Funkcje składowe const
  3. constexpr i czas kompilacji
  4. consteval i constinit
← Powrót do C++ Academy