Gibt's sowas wie virtuelle Variablen?



  • Tach allerseits,

    So sieht's bisher aus:

    class BasisA
    {
      void FunktionA();
    };
    class AbgeleitetA : public BasisA;
    
    class BasisB
    {
     BasisB(){};
     BasisA *var;
     void FunktionB(){var->FunktionA();};
    };
    
    class AbgeleitetB : public BasisB
    {
     AbgeleitetA *var;
     AbgeleitetB(){var = new AbgeleitetA;};
    };
    
    int main()
    {
     AbgeleitetB var;
     var.FunktionB();
     .
     .
     .
     return 0;
    }
    

    Wenn ich das jetzt ausführe, stürzt das Programm natürlich ab, da "var" in "BasisB" noch auf null zeigt.
    Was ich gern hätte, wäre eine virtuelle "var" in "BasisB", damit in "FunktionB()" die "var" aus "AbgeleitetB" verwendet wird.
    Dummerweise gibts ja keine virtuellen Variablen.
    Hat einer evtl. ne Idee wie das trotzdem zu lösen ist?

    merci im voraus 🙂



  • 😕

    #include <iostream>
    
    using namespace std;
    
    class BasisA
    {
    public:
    	void FunktionA(){cout << "hallo" << endl;}
    };
    class AbgeleitetA : public BasisA{};
    
    class BasisB
    {
    public:	
    	BasisB(){}; 
    	void FunktionB(){var->FunktionA();};
    protected:
    	BasisA *var;
    };
    
    class AbgeleitetB : public BasisB
    {
    public:
    	AbgeleitetB(){var = new AbgeleitetA();};
    };
    
    int main()
    {
    	AbgeleitetB var;
    	var.FunktionB();
    	return 0;
    }
    


  • Destruktor bitte nicht vergessen:

    • bei BasisB var deleten
    • bei BasisA Destruktor virtuell machen


  • Jetzt, wo ich's seh...
    Hab wohl eine Variable zuviel deklariert 🙄

    Schönen Dank auch 😃


Anmelden zum Antworten