Vererbung



  • class x{
    
    public: funktion1();
    
    protected:funktion2();
    
    private: funktion3();
    
    };
    
    class y:protected x{};
    
    void main (void){
    
    y objekt;   // Instanz der Klasse y  mit Namen objekt anlegen
    
    y.funktion1();
    y.funktion2();
    y.funktion3();
    }
    

    Welcher Funktionsaufruf wäre denn jetzt nicht mehr möglich ?
    Die Klasse y erbt von klasse x protected. Was bedeutet das für die Instanz
    mit Namen objekt



  • Noch nee Frage.

    Müssen pure virtual Funktionen außerhalb der klasse auch noch
    definiert werden ? Wofür frag ich mich gerade.



  • Hallo,

    meines Wissens ist keiner der drei Methodenaufrufe erlaubt, weil alle Methoden durch die protected-Vererbung protected bzw. private (funktion3) sind.

    Siehe dazu auch: http://tutorial.schornboeck.net/vererbung.htm

    Deine zweite Frage verstehe ich nicht genau.

    Ein

    virtual void function() = 0;
    

    in der Basisklasse sollte doch reichen, oder was meinst du genau?



  • Warum probierst du das nicht einfach aus?!

    btw:
    Die fehlen die Typen bei den Funktionen und implementierungen sowieso. Das heisst, dass der Code so oder so nicht kompiliert (und auch nicht linken würde, wenn die Typen da wären).
    Dazu kommt noch, dass es int main heisst und nicht void main !

    Bei deiner Anschlussfrage komme ich nicht draus. Du hast da keine virtuellen Funktionen. Und klar wenn du sie benutzen willst musst du sie implementieren.

    Zeig doch besser lauffähigen Code. Dann hast du nämlich die Antwort bereits.. 🙄

    //EDIT
    Natürlich sind alle 3 Aufrufe nicht erlaubt, da sie in der abgeleiteten Klasse nach ausse alle privat sind. (Aber das hätte dir auch ein Compiler sagen können..)



  • @ vererber

    ich mein normalerweise deklariert man eine Funktion in der Klasse und
    definiert sie außerhalb

    z.b.

    x::funktion (){
    
       hier folgt die Definition
    
    }
    


  • aha drakon.

    Es gehn tatsächlich alle aufrufe nicht.

    Leider hab ich bis heute nicht verstanden was protected Vererbung
    von private Vererbung unterscheiden soll 😞



  • virtual void function() = 0;
    

    Das hier ist doch nur eine Deklaration , schließlich fehlen die {} klammern 🙂



  • sorry nochmal

    natürlich hätte es oben so heissen solln

    objekt.funktion1(); 
    objekt.funktion2(); 
    objekt.funktion3();
    


  • blurry254 schrieb:

    Leider hab ich bis heute nicht verstanden was protected Vererbung
    von private Vererbung unterscheiden soll 😞

    Ganz einfach. Wenn du privat erbst, dann kann, wenn du erneut eine Klasse ableitest (also dann die dritte) auf keine public und privat Funktionen zugreifen. Bei protected schon. (Nach aussen ist aber, wie du siehst privat)



  • Es ist doch egal ob ich protected oder private vererbe,
    in beiden Fällen hat eine Instanz keinerlei Zugriff mehr 😞



  • class y:protected x{}; 
    
    class z:public y{};
    

    die Klasse z kann jetzt nicht mehr auf Klasse x Elemente zugreifen ???



  • Keiner mehr da ?



  • Du hast 3 Möglichkeiten.
    1. Du fragst hier jedes Detail nach und bekommst irgendwann keine Antwort mehr oder
    2. Du liest es in einem Buch oder Online nach oder
    3. Du probierst es einfach mal aus

    Ich persönlich mag Variante 1 nicht. 2 und 3 sind aber schon sehr gut und können wahrscheinlich die meisten Fragen beantworten.



  • class x{ 
    
    public: void funktion1(){}; 
    
    protected:void funktion2(){}; 
    
    private: void funktion3(){}; 
    
    }; 
    
    class y:protected x{
    
    public:
    
    	void foo(){ funktion2(); } 
    
    }; 
    
    class z:public y{
    
    public:
    
    	void foo(){funktion2();}
    
    };
    

    Es kommt kein Fehler , sry ich verstehs einfach nicht



  • ahhhhhhhh

    bei protected geht es ja , aber nicht bei private

    Klar dass kein Fehler kam .


Anmelden zum Antworten