Zeiger auf Elemente einer Klasse
Will man Pointer auf Elemente einer Klasse definieren, muß man beachten,
daß zum Type eines Elemenst auch sein Klassenname gehört. So ist
die Zuweisung
class X { public: int x; void f(); void g();};
X x;
int* j = &(x.j); // Fehler: &(x.j) vom Typ int X::*
void (*g)();
g = x.f; // Fehler: x.f vom Typ void (X::*)()
nicht zulässig. Vielmehr muß ein Typ definiert werden, der den
Klassennamen enthät.
Explizites Casting ist dann möglich.
typedef int X::* pXint; // Zeiger auf int-Element der Klasse X
pXint y = x.i;
typedef void (X::*pF)(); // Zeiger auf Funktion ohne Parameter mit
// Rueckgabewert void der Klasse X
pF G = x.f;
Funktionsaufrufe geschehen dann mit den Operatoren .* und
->*
X a, *b = new X; // a ist vom Typ X, b ist Zeiger auf X
(a.*G)(); // Aufruf von a.f(); (Umschliessende Klammer wichtig)
g = x.G;
(b->*G)(); // Aufruf von b->g();