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 gewohnt
    

    bis 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é


Anmelden zum Antworten