Problem mit privater Vererbung



  • Hi,

    hab nen kleines Verständnisproblem bezüglich der privaten Vererbung, da ich in
    einem pdf gelesen habe das die in der Basisklasse private deklarieren Attribute
    in den abgeleiteten Klassen ebenfalls provate sind, es aber im Unterschied zur
    öffentlichen Vererbung möglich ist darauf zuzugreifen.

    Mein Compiler hingegen akzeptiert dies nicht, das lässt nur den Schluß zu das
    die Aussage falsch ist oder ich irgendetwas nicht richtig verstanden und
    umgesetzt habe.

    Hier mein Beispielcode

    class Basis { 
      private:
         int x;
    };
    
    class Ableitung: private Basis {
      public
         void inc() {
            ++x;
         }
    };
    


  • es liegt an den Zeilen 2 und 3! Es ist egal wie Du die Vererbung deklarierst. Auf die private-member einer (Basis)klasse kannst Du nie zugreifen.



  • Ein Beispiel, das zum Verständnis beitragen soll:

    das geht:

    class base
    {
        protected:
            int i;
    };
    
    class derived : private base
    {
        void foo()
        {
            ++this->i;
        }
    };
    

    ...das geht nicht (derived 2 kann nicht auf i zugreifen, da es in derived bereits private ist):

    class base
    {
        protected:
            int i;
    };
    
    class derived : private base
    {
        void foo()
        {
            ++this->i;
        }
    };
    
    class derived2 : private derived
    {
        void foobar()
        {
            ++this->i;
        }
    };
    

    Wenn du derived allerdings protected von base ableitest, kannst du in derived2 auch auf i zugreifen. Experimentier am besten mal ein wenig rum, um es besser zu verstehen 🙂


Anmelden zum Antworten