Menu
Coddy logo textTech

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 existiert, aber verrate nicht, was sich darin befindet. Dies wird mithilfe eines unvollständigen Typs erreicht:

// 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.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler