Ableitungsverbot



  • gibt es ne möglichkeit das ableiten von einer klasse zu verbieten?



  • gibt es ne möglichkeit das ableiten von einer klasse zu verbieten?

    Du kannst nicht verhindern, dass jemand von deiner Klasse ableitet. Du kannst aber verhindern, dass eine solche Klasse dann instanziiert werden kann. Damit ist das ableiten sinnlos:

    class Final
    {
    friend class X;
    private:
        Final() {}
    };
    
    // Klasse von der praktisch nicht
    // abgeleitet werden kann:
    class X : private virtual Final
    {
    };
    
    class VersuchsDoch : public X
    {
    };
    
    int main()
    {
        VersuchsDoch d;    // Error. Final::Final() ist private!
    }
    

    Der Trick basiert darauf, dass der Ctor einer virtuellen Basisklsse immer von der am weitesten abgeleiteten Klasse aufgerufen werden muss. Da Finals Ctor aber private ist, kann er nur von Final selbst oder von befreundeten Klassen aufgerufen werden. Nicht aber von anderen Klassen.
    Da nur X ein Freund von Final ist und da X virtuell von Final erbt,
    kann niemand mehr von X erben und die neue Klasse dann instanziieren.

    [ Dieser Beitrag wurde am 29.03.2003 um 19:12 Uhr von HumeSikkins editiert. ]



  • Original erstellt von HumeSikkins:
    **```cpp
    class X : private virtual Final

    
      
    Da nur X ein Freund von Final ist und da X virtuell von Final erbt,**
    

    Man ne dumme Frage am Rande, die mit dem Thread ansich nichts zu tun hat... Welche bedeutung hat es, wenn man von einer Klasse VIRTUAL ableitet? Wenden dann alle Methoden der Basisklasse aus Sicht der neuen Klasse auch virtual, falls sich es zuvor noch nicht waren, oder wozu dies ein virtuelles Ableiten sonst? (sorry, dass die Frage nichts mit dem eigentlichen Thread zu tun hat, aber die Frage musste ich einfach stellen)



  • ne, werden sie nicht. virtual vor klassen hat ne andere bedeutung. google mal nach deadly diamond of death



  • Original erstellt von <fisch>:
    ne, werden sie nicht. virtual vor klassen hat ne andere bedeutung. google mal nach deadly diamond of death

    Aaah! Ok, verstanden! Aber da ich Mehrfachvererbung stehts vermeide, werde ich glücklicherweise auch nie diese Probleme haben, die sich dadurch ergeben. Aber habe wieder etwas dazu gelernt, cool - Danke!



  • Welche bedeutung hat es, wenn man von einer Klasse VIRTUAL ableitet?

    In drei Worten: Composition by reference.


Anmelden zum Antworten