Zugriff auf member von Subklasse von oben



  • Hallo,

    blöder titel aber ich weiß nicht wie ichs beschreiben könnte.
    Ich möchte auf Member einer erbenden Klasse zugreifen. Evtl. Blödsinn aber
    mir geht es um folgendes: Ich möchte in der main auf der einen seite nur einen code als schnittstelle über Base aufrufen müssen und auf der anderen seite aber auf member der subklassen von base zugreifen.

    Ich sehe im moment nur 2 Möglichkeiten:
    a) Getter-Methoden in Base zu implementieren um so von unten nach oben durchzugreifen
    b) Immer mit einem if-else konstrukt zwei verschiedene MyClass.bar(mtxdouble)
    bzw. MyClass.bar(mtxcomplex) aufrufen zu können.

    Beides finde ich unschön. Gibt es eine andere Möglichkeit?

    Pseudocode:

    // MyClass.cpp
    void MyClass::bar(Base& base)
    {
         std::cout << base.variable << std::endl; // ???
    }
    
    class Base
    {
       public:
          virtual ~Base() {}
          virtual void foo() = 0;
    };
    
    class MtxDouble : Base
    {
       public:
          void foo() { std::cout << "do some" << std::endl;}
          int variable;
    };
    class MtxComplex : Base
    {
       public:
          void foo() { std::cout << "do some" << std::endl;}
          int variable;
    };
    
    int main()
    {
       Base* mtx = NULL;
       MtxDouble mtxdouble;
       MtxComplex mtxcomplex;
    
       if (i = 0) mtx = &mtxdouble;
       else mtx = &mtxcomplex;
    
       mtx->foo();
    
       // hier möchte ich aber auf einen Member von mtxdouble/mtxcomplex zugreifen
       int a = mtx->variable; //???
       MyClass.bar();
    }
    


  • Mach eine virtuelle Methode, die dir den Wert der Variable liefert und ueberschreibe diese in deinen abgeleiteten Klassen.



  • Danke knivil: Ist das so üblich und wenn ja - dann muss ich ja für jede membervariable eine eigene methode schreiben....wirklich ein sinnvoller schöner weg?



  • Gambo2000 schrieb:

    Danke knivil: Ist das so üblich und wenn ja - dann muss ich ja für jede membervariable eine eigene methode schreiben....wirklich ein sinnvoller schöner weg?

    Natürlich, denn eine ordentliche Klasse hat ja gar keine öffentlichen Daten 😉


Anmelden zum Antworten