c / intermediate
Snippet
Kapselung mit Opaque-Pointern
Opaque-Pointer ermöglichen es, die interne Implementierung einer Struktur vor dem Benutzer zu verbergen. Indem nur eine Vorwärtsdeklaration im Header bereitgestellt und der Struct in der C-Datei definiert wird, erreicht man eine Kapselung analog zu privaten Membern in der OOP.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// point.htypedef struct Point Point;Point* create_point(int x, int y);void print_point(Point* p);// point.c#include <stdio.h>#include <stdlib.h>struct Point {int x, y;};Point* create_point(int x, int y) {Point* p = malloc(sizeof(struct Point));if (p) { p->x = x; p->y = y; }return p;}void print_point(Point* p) {printf("Point: %d, %d\n", p->x, p->y);}
Erklärung
1
typedef struct Point Point;
Vorwärtsdeklaration, die dem Compiler mitteilt, dass 'Point' existiert, ohne seine Felder offenzulegen.
2
struct Point { int x, y; };
Die eigentliche Definition ist in der .c-Datei verborgen, was den direkten Zugriff auf x und y von außen verhindert.