Implementieren einer rein virtuellen Funktion durch eine andere Basisklasse



  • Hallo,

    ich habe ein Interface und eine Basisklasse, welche einen Teil des Interfaces bereits implementiert. Nun möchte ich gerne in einer Kindklasse das Interface implementieren und dazu auch von der Basisklasse erben:

    class Interface
    {
    	public:
    		virtual void func1()=0;
    		virtual void func2()=0;
    };
    
    class Basisklasse
    {
    	public:
    		void func1() {}
    };
    
    class Child:public Interface, public Basisklasse
    {
    	public:
    		void func2() {}
    };
    

    Leider akzeptiert C++ das so nicht und behauptet, in Child sei die Funktion func1() rein virtuell. Das muss doch irgendwie gehen.

    Die Basisklasse kann leider nicht vom Interface erben, da sie noch anderweitig verwendet wird.

    Grüße,
    Heinzi



  • Wenn die Basisklasse func1 redefinieren soll, muß sie auch vom Interface erben.

    class Child:public Interface, public Basisklasse 
    { 
        public: 
            void func1() {
               Basisklasse::func1();
            }
            void func2() {} 
    };
    


  • class Child : public Interface
    {
    public:
      void func2() {}
      void func1() { b.func1(); }
    
    private:
      Basisklase b;
    
    };
    
    class Child2 : public Interface
    {
    public:
      void func2() {}
      void func1() { cout << "ätsch, ich mach was anderes"}
    
    };
    

    Wenn ich es richtig verstanden habe, willst du von Basisklasse die Implementierung erben, nicht die Schnittstelle. Dazu verwendet man private Vererbung oder aggregation.



  • Vielen Dank für eure schnelle Hilfe - mit euren Vorschlägen kann ich mir jetzt doch einige Coderedundanz ersparen 🙂

    Grüße



  • Du solltest Deiner Interfaceklasse noch einen virtuellen Destruktor verpassen. Sonst knallt es, wenn Du abgeleitete Objekte über Basisklassenzeiger zerstörst.


Anmelden zum Antworten