Konzept der Opaque Pointers
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 17 von 61.
Bisher kann jeder, der diese Header-Datei einbindet, alle Member einer Struktur sehen und direkt auf sie zugreifen, wenn wir eine Struktur in einer Header-Datei definieren. Das verletzt die Kapselung: das Prinzip, interne Details vor externem Code zu verbergen.
C bietet eine leistungsstarke Technik namens opaque pointers, um dieses Problem zu lösen. Die Idee ist einfach: Deklariere, dass ein
// wallet.h
typedef struct Wallet Wallet; // Nur Deklaration - kein Rumpf!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Beachte, dass es keine geschweiften Klammern gibt. Wir definieren nie, was Wallet enthält. Der Compiler weiß, dass der Typ existiert, aber nicht, wie groß er ist oder welche Member er besitzt. Das bedeutet, dass Code, der diesen Header einbindet, nur mit Zeigern auf Wallet arbeiten kann, niemals direkt mit der Struktur selbst.
Warum ist das wichtig? Da die eigentliche Struct-Definition in der .c-Datei verborgen ist, kann Code, der deinen Header verwendet, weder w->balance schreiben noch sizeof(Wallet) verwenden. Er muss die von dir bereitgestellten Funktionen verwenden. Du kontrollierst den gesamten Zugriff auf die Daten und kannst die interne Struktur später ändern, ohne Code zu beschädigen, der von deinem Header abhängt.
In der nächsten Lektion übst du, den eigentlichen Struct-Körper in der Quelldatei zu definieren und damit das Muster des opaken Zeigers abzuschließen.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler