Frage zur Vererbung



  • Hallo!

    Angenommen ich habe eine abstrakte Basisklasse.
    Davon erbt eine Klasse, die auch benutzt werden soll, und deswegen die abstrakten Methoden implementiert.

    Nun erbt von der erbenden Klasse eine weitere Klasse, die diese Methoden überschreiben soll.

    Wie kann ich den Programmierer dazu zwingen, dass er nicht vergisst die abstrakten Methoden neu zu implementieren? Schließlich wurden sie in der ersten erbenden Klasse schon implementiert und deswegen würde kein Compiler meckern, falls er es vergisst und es würde einfach die "falsche" Methode aufgerufen werden.

    Ich hoffe ihr wisst was ich meine 🤡



  • Das geht so nicht. Wenn aber die abstrakten Methode aus der Basisklasse neu definiert werden sollen,warum erbt diese zweite Klasse dann ncht gleich von der abstrakten Basisklasse?



  • Braunstein schrieb:

    Das geht so nicht. Wenn aber die abstrakten Methode aus der Basisklasse neu definiert werden sollen,warum erbt diese zweite Klasse dann ncht gleich von der abstrakten Basisklasse?

    Weil sie Methoden von der Klasse braucht, die schon von der basisklasse geerbt hat 😃



  • Das wird so nicht funktionieren. Das kannst du höchstens in die Doku schreiben. Weil jemand, der die ursprünlich abstrakte Methode nicht neu implementiert, wird wohl mit der bereits implementierten Variante _zufrieden_ sein.

    Du machst eine Methode dann pur virtual, wenn _Du_ nicht weißt, wie du sie implemntieren sollst. Pur virtual macht man eigentlich nicht um den User zu zwingen es zu implemntieren. Es ist nur ein folge dessen, das Du nicht weißt, was du implementieren sollst.

    D.h. also wenn die erste geerbte Klasse schon was implementiert hat, erfüllt sie erstmal ihre Aufgabe. Du kannst somit niemanden zwingen, weil sonst bräuchte man die erste Implementierung nicht machen.

    Was Du jetzt hier willst, stellt somit einen Widerspruch da. Und wer mit der ersten Impelemntierung nicht zufrieden ist (sein soll, nach deiner Auffassung) soll halt von der abstrakten Klasse erben.



  • Delryn schrieb:

    Weil sie Methoden von der Klasse braucht, die schon von der basisklasse geerbt hat 😃

    UserClass is not Base!
    UserClass is Interface!

    class Interface
    {
    public:
    	virtual void foo() = 0;
    	virtual void foo2() = 0;	
    	virtual void foo3() = 0;
    };
    
    class Base : public Interface
    {
    public:
    	virtual void foo(){}		
    	virtual void foo2(){}
    	virtual void foo3(){}
    };
    
    class UserClass : public Interface
    {
    public:
    	virtual void foo()
    	{
    		std::cout << "UserClass::Interface\n";
    	}	
    
    	virtual void foo2()
    	{
    		implHelper->foo2();
    	}
    
    	virtual void foo3()
    	{
    		implHelper->foo3();
    	}
    
    private:
    	Base implHelper;
    };
    


  • Usercalss muss von Base und Interface "erben"



  • Die Idee ist prinzipiel gut, scheitert allerdings am Einsatzzweck der Software (Würde zu lange dauern das zu erläutern :D).
    Aber das merk ich mir auf jeden Fall 👍

    // Also ich meinte jetzt nicht die Idee der Mehrfachvererbung 😃



  • Wieso Mehrfachvererbung ???

    Delryn schrieb:

    Weil sie Methoden von der Klasse braucht, die schon von der basisklasse geerbt hat

    Du erbst ja nur von Base das andere meint eine implementierung von interfaces




Anmelden zum Antworten