Doppelte vererbung?



  • Hallo,

    geht das folgende überhaupt?

    class A_Basis
    {
           protected:
               virtual void foo() = 0;
    }
    
    class B : A_Basis
    {
            protected:
                void foo();
                virtual void bar() = 0;
    };
    
    class C : B
    {
             protected:
                 void bar();
    };
    


  • Inwiefern soll es denn gehen oder nicht gehen? Und: Wenn du schon den Test-Code schreibst und dich sogar testo nennst, warum schnappst du dir nicht deinen Compiler und probierst es aus 😕



  • ich wollte nur wissen ob es möglich ist eine abgeleitete klasse auch als basisklasse zu definieren sozusagen....



  • testo schrieb:

    ich wollte nur wissen ob es möglich ist eine abgeleitete klasse auch als basisklasse zu definieren sozusagen....

    das wird staendig gemacht, wenn nicht sogar fast immer 😉



  • danke jetzt weiß ich dass es geht und ich nur irgendwo ein anderes Problem habe:

    es kann kein Objekt des abstrakten Typs »ClassB<double>« belegt werden
     denn die folgenden virtuellen Funktionen sind rein innerhalb »ClassB<double>«:
    Anmerkung:  void ClassB<T>::test() [with T = double]
    

    ich dachte diese meldung wäre weil es gar nicht möglihc ist.....



  • Naja du kannst halt keine Instanz von B haben ...



  • hmm....aber warum kann ich dann eine Instanz von A haben?



  • Kannst du nicht.

    class base
    {
    protected:
        virtual void func() = 0;
    }
    
    class foo : public base
    {
    protected:
        void func() { std::cout << "foo" << std::endl; }
    };
    
    class bar : base
    {
    protected:
        void func() { std::cout << "bar" << std::endl; }
    };
    
    int main()
    {
        std::vector<base*> data;
        data.push_back(new bar);
        data.push_back(new foo);
        // ...
        for (std::vector<base*>::const_iterator it = data.begin(); it != data.end(); ++it)
            delete (*it);
    }
    

    ...



  • es kann kein Objekt des abstrakten Typs »ClassB<double>« belegt werden
     denn die folgenden virtuellen Funktionen sind rein innerhalb »ClassB<double>«:
    Anmerkung:  void ClassB<T>::test() [with T = double]
    

    lol 😃
    "pure" an der Stelle mit "rein" zu übersetzen ist wiedermal ganz toll...
    Ich sag ja: deutsche Fehlermeldungen, und es kennt sich keine Sau mehr aus.


Anmelden zum Antworten