Methode einer Klasse über eine andere überschreiben?



  • Hallo,

    ich hab eine Frage zu folgendem Problem. Ich habe eine Klasse A mit virtuellen methoden die sich überschreiben lassen. Dann habe ich eine Klasse B die NICHT von Klasse A abgeleitet ist, aber genau die Methoden von der Signatur wie Klasse A hat. Dann habe ich eine Klasse C die Klasse A und B besitzt. Jetzt würde ich gerne mit den Methoden aus Klasse A die in C über A überschreiben. Ein kleines Beispiel

    class A {
       public:
           virtual test()
           { printf("Klasse A");}
    };
    
    class B{
       public:
           test()
           { printf("Klasse B");}
    };
    
    public C : public A, public B {
    }
    
    main () 
    {
         C t;
         t.test(); //also ausgabe sollte also "Klasse B" erscheinen.
    }
    

    Ich könnte diese natürlich auch anders ableiten um "Klasse B" zu erhalten, aber eventuell klappt das ja so..

    Wie man sieht habe ich also versucht die Methode aus Klasse A in Klasse C mit denen von Klasse B zu überschreiben.

    Hat einer eine Idee ob das klappen kann?

    Danke, mfg donnerCobra



  • Hättest Du das mal durch den compiler gejagt, hättest Du festgestellt, das es so nicht geht.

    public C : public A, public B {
    }
    

    muß heissen:

    class C : public A, public B {
    }
    

    und 2.
    bekommst Du dann die Meldung das er nicht weiss welche Methode (aus der Klasse A oder 😎 er benutzen soll.

    Eine mMöglichkeit ist:

    class A {
       public:
           virtual test()
           { printf("Klasse A");}
    };
    
    class B{
       public:
           test()
           { printf("Klasse B");}
    };
    
    public C : public A, public B {
    public:
    	void test()
    	{B::test();}
    }
    
    main () 
    {
         C t;
         t.test(); //also ausgabe sollte also "Klasse B" erscheinen.
    }
    

    was aber dem gleichen entspricht, als wenn Du gleich eine Instanz der Klasse B erstellen würdest. Aber vielleicht habe ich dein Problem auch nur Falsch verstanden.

    Gruß Matthias


Anmelden zum Antworten