Konvention zur Ansprechung der Oberklassenelemente



  • Hallo liebes Forum,

    ich habe eine kurze Frage und zwar ist es allgemein ein schöner Stiel aus der Unterklasse alle Elemente der Oberklasse mit dem Scope-Operator anzusprechen?
    Bsp:

    class A 
    {
     public:
      int a;
    }
    
    class B : public A
    {
     public:
      int get() { return A::a;} // "A::a" anstatt nur "a"
    }
    

    Mir ist heute aufgefallen, dass bei der Vererbung mit Templates ohne den Scope-Operator Probleme enstehen können:
    Bsp:

    template <typname X>
    class A 
    {...}
    
    template <typename X>
    class B : public A<X>
    {
         // HIER MÜSSEN ALLE ELEMENTE AUS "A" MIT DEM SCOPE-OPERATOR ANGESPROCHEN
         // WERDEN, SONST WERDEN SIE NICHT GEFUNDEN
    }
    

    Von daher dachte ich wäre es sicher schöner sich anzugewöhnen in Unterklassen allgemein (ob einer Vererbung mit oder ohne Templates vorliegt) den Scope-Operator zu verwenden oder wie seht bzw. macht ihr das?

    Viele Grüße und schönes Wochenende an alle



  • this-> scbreiben

    Spart viel Merkarbeit wo das Element jetzt herkommt 🙂



  • Danke für deine Antwort 🙂

    "this" bezieht sich aber auf die Klasse selbst und ich hab mich jetzt auf das Ansprechen von Elementen der Oberklasse bezogen

    Gruß 🙂



  • asdfasdf schrieb:

    "this" bezieht sich aber auf die Klasse selbst und ich hab mich jetzt auf das Ansprechen von Elementen der Oberklasse bezogen

    Nö.
    "this" ist ein Zeiger auf ein Objekt des Typs zu dem die Memberfunktion gehört in der man "this" schreibt. Und dieses Objekt "hat" auch "geerbten" Member.
    return this->a; geht in deinem (non-Template) Beispiel genau so wie return a; oder return A::a; .

    Zu deiner ursprünglichen Frage: ich schreibe immer einfach nur "a" (bzw. "m_a", da ich "m_" als Prefix für Member verwende).



  • hustbaer schrieb:

    Zu deiner ursprünglichen Frage: ich schreibe immer einfach nur "a" (bzw. "m_a", da ich "m_" als Prefix für Member verwende).

    Tue ich auch, nur halt mit Präfix "m".

    Falls nötig tendiere ich eher zu qualifizierter Angabe ( X:: ), z.B. auch um virtuelle Funktionen explizit aufzurufen. this-> verwende ich so gut wie nie.


Anmelden zum Antworten