Methodenaufruf aus Member heraus
-
Hallo,
folgende Situation: Ich habe zwei Klassen A und B folgender Form:
class A { public: doSomething(); private: B b; }; class B { ... };Kann ich nun aus der Membervariable b heraus irgendwie die Methode doSomething() der Klasse A aufrufen?
-
Nein, nicht direkt. Es gibt keine papa()-Funktion oder sowas in der Art.
-
TheBrain schrieb:
Kann ich nun aus der Membervariable b heraus irgendwie die Methode doSomething() der Klasse A aufrufen?
Dies ist nur möglich wenn du der Instanz von B die entsprechende A-Instanz übergibst (z.B. als Konstruktorparameter). Ohne Kenntnis ist auch kein Aufruf möglich.
-
Aber das führt ja zu ner üblen Verschachtelung: Ich muss dann ja in der Header-Datei von Klasse A die Header-Datei von Klasse B inkludieren und in Klasse B die Header-Datei von Klasse A. Darf man so was? Ich habe Klasse A als Singleton implementiert, könnte mir die Instanz also holen ... Aber mir erscheint das nur irgendwie dämlich

-
Hallo
Du brauchst in Klasse B einen Pointer (oder Referenz) auf eine Instanz von A, dann reicht es im Header von B eine Forward Declaration auf A einzurichten anstatt den A-Header zu includen.
// B.h class A; // Forward Declaration class B { public : B(A* a); private : A* a; }; // B.cpp #include "A.h" // ... Member a verwenden wie gewohntbis bald
akari
-
Das würde dann bedeuten, dass ich in Klasse A ein member der Klasse B habe, das wiederum ein member der Klasse A hat??
-
Nein. Klasse A beinhaltet eine Instanz der Klasse B als Member. Klasse B hingegen hat als Member nur einen Pointer/Zeiger auf eine Instanz der Klasse A.
-
TheBrain schrieb:
Das würde dann bedeuten, dass ich in Klasse A ein member der Klasse B habe, das wiederum ein member der Klasse A hat??
Du hälst damit in einer Instanz der Klasse A auch eine Instanz der Klasse B, diese weiderum enthält einen Verweis (nicht eine eigene Instanz) der A-Instanz.
cu André