[solved] Mehrfachvererbung C::f() { A::f(); B::f(); }



  • Hallo,

    ich hab eine Klasse, die von zwei Eltern Methoden mit gleichem Namen erbt. Nun wollte ich diese in der Kind-Methode explizit aufrufen, aber dies führt entweder zu Speicherzugriffsfehlern oder Endlosschleifen 😕

    #include <iostream>
    using namespace std;
    
    class baseA
    {
    	public:
    		virtual void out() {cout<<"A"<<endl;}
    };
    
    class baseB
    {
    	public:
    		virtual void out() {cout<<"B"<<endl;}
    };
    
    class derivedC : public baseA
    {
    	public:
    		void out() {baseA::out(); cout<<"C"<<endl;}
    };
    
    class derivedD : public baseA, public baseB
    {
    	public:
    		void out() {baseA::out(); baseB:out(); cout<<"D"<<endl;}
    };
    
    int main()
    {
    	baseA A;
    	derivedC C;
    	derivedD D;
    
    	cout << "-A-" << endl;
    	C.out(); // geht
    
    	cout << "-C-" << endl;
    	C.out(); // geht
    
    	cout << "-D-" << endl;
    	D.out(); // hier erscheint das Problem
    
    	return 0;
    }
    

    Die Methoden heißen alle gleich und die Eltern-Methoden sind virtuell, weil ich Später baseA* pointer habe, und immer (polymorph) ->out() aufrufen möchte.

    Was mache ich falsch?

    Lars



  • In Zeile 25 fehlt ein : 😉



  • Scherzkeks.
    Mach die Warnungen an.

    C:\src\research\tmpcpp\main.cpp|25|warning: label 'baseB' defined but not used|
    

    Und jetzt schau mal die zugrhörige Zeile an:

    void out() {baseA::out(); baseB:out(); cout<<"D"<<endl;}
    

    Alles klar?



  • oh mann. 🤡 Danke!!


Anmelden zum Antworten