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
- Zmienne i parametry const
- Funkcje składowe const
- constexpr i czas kompilacji
- consteval i constinit