Mehrfachvererbung unter folgenen Bedingungen:



  • Code:

    class A{
    
    DATA x;
    
    };
    class B1: public A{
    
    void funkA();
    };
    class B2: public A{
    
    void funkB();
    };
    
    class C: public B1, public B2{
    
    }
    

    nun köntne ich die funktionalitä von b1 und B2 in C verwenden, hätte ich dann 2 gekonte DATenobkete aus A??



  • Ja, hast du. Du hast etwa sowas:
    A+B1 - A+B2 - C im Speicher. Das kannst du nur durch virtuelle Vererbung umgehen. Siehe auch: http://en.wikipedia.org/wiki/Diamond_problem



  • Jup. Umgehen kannst du das mit virtueller Vererbung:

    class A{
    
    DATA x;
    
    };
    class B1: public virtual A{
    
    void funkA();
    };
    class B2: public virtual A{
    
    void funkB();
    };
    
    class C: public B1, public B2{
    
    }
    

    In diesem Fall enthält C nur ein A-Objekt.

    Das ist die technische Lösung, allerdings ist Mehrfachvererbung die Klassen mit Daten einschließt in den seltesten Fällen sinnvoll/nötig. Hoffe du hast gut über dein Design nachgedacht.


Anmelden zum Antworten