Menu
Coddy logo textTech

Koncepcja niejawnych wskaźników

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 17 z 61.

Jak dotąd, gdy definiujemy strukturę w pliku nagłówkowym, każdy, kto dołączy ten plik nagłówkowy, może zobaczyć i bezpośrednio uzyskać dostęp do wszystkich jej składowych. Narusza to enkapsulację: zasadę ukrywania szczegółów wewnętrznych przed kodem zewnętrznym.

C oferuje potężną technikę zwaną nieprzezroczystymi wskaźnikami, która rozwiązuje ten problem. Pomysł jest prosty: zadeklaruj w pliku nagłówkowym, że struktura istnieje, ale nie ujawniaj, co się w niej znajduje. Robi się to za pomocą niekompletnego typu:

// wallet.h
typedef struct Wallet Wallet;  // Tylko deklaracja – bez definicji!

Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);

Zwróć uwagę, że nie ma tu nawiasów klamrowych. Nigdy nie definiujemy, co zawiera Wallet. Kompilator wie, że ten typ istnieje, ale nie zna jego rozmiaru ani składowych. Oznacza to, że kod zawierający ten nagłówek może działać tylko ze do Wallet, a nigdy bezpośrednio z samą strukturą.

Dlaczego to ma znaczenie? Ponieważ właściwa definicja struktury jest ukryta w pliku .c, żaden kod korzystający z Twojego pliku nagłówkowego nie może użyć w->balance ani sizeof(Wallet). Musi korzystać z funkcji, które udostępniasz. Masz kontrolę nad całym dostępem do danych i możesz później zmienić wewnętrzną strukturę bez psucia kodu zależnego od Twojego pliku nagłówkowego.

W następnej lekcji poćwiczysz definiowanie właściwego ciała struktury w pliku źródłowym, kończąc wzorzec nieprzezroczystego wskaźnika.

Spróbuj swoich sił

Ta lekcja nie zawiera wyzwania z kodem.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online