Mehrfachvererbung und Interfaces



  • Wer nutzt denn in C++ die Bezeichnung "Protokoll"? Das hab ich bisher nur bei ObjC und CLOS gehört.



  • Vielleicht habe ich auch nur einen falschen Eindruck bekommen. In letzter Zeit habe ich mit meheren Leuten gesprochen, die es Protokolle nannten und nie Schnittstelle.



  • Leider kommt man, wenn man nur mal oberflächlich stöbert ganz schnell auf den Standpunkt das sie prinzipiell schlecht, schlimm oder böse ist.

    Was waere die Welt ohne Vorurteile 😃

    richtiger waere:
    Mehrfachvererbung foerdert Probleme bei schlechten Design viel eher ans tageslicht als eben ohne.
    Wenn du Dir die Standpunkte und die zugrunde liegenden Dokus richtig zu gemuete fuehrst, lernst recht schnell was bei mwehfachvererbung zu beachten hasst, und wie vorrausschauend und sauber man seine Schnittstellen zu definieren hat.

    und ebenfalls wichtig:
    Mehrfachvererbung kann ungemein helfen, generische Biblithoken schlank zu halten, Anstatt die anzahl der Klassen einer bibo im verhealtniss zum kreuzprodukt aller Anforderungerung anwachsen zu lassen 😃 Siehe ATL/WTL <-> MFC ....

    Ciao ...



  • Helium schrieb:

    Eine abstrakte Klasse muß doch aber nicht zwangsläufig eine Schnittstelle sein, oder? (Es geht mir dabei wirklich bloß um die Definition)

    Nein, eine Abstrakte Klasse kann trotzdem Methoden implementieren und Daten beinhalten, was bei Schnittstellen nicht der Fall ist.

    Schnittstelle kann auch reine virtuelle Methode implemetieren.



  • wenn du mehrfach von pure virtual klassen (das meinst du mit "interfaces", oder?) ableitest

    Es gibt keine "pure virtual Klassen".

    Wer nutzt denn in C++ die Bezeichnung "Protokoll"?

    Scotter Meyers, Herb Sutter, John Lakos um nur einige zu nennen.



  • Ich denke, das was du meinst ist "ist implementiert mit"? Also analog zum Java-Interface?

    Weil dafür gibts dann in C++ die private "Vererbung" (hab ich extra in Anführungsstrichen!).

    class Hund : public Tier : private XYInterface
    {}
    

    In dem Fall ist Hund von Tier abgeleitet (Hund ist ein Tier) und hat die Implementierung XYInterface. Wobei das hier KEINE Mehrfachvererbung ist. Das klommt allerdings denke ich deinem gewünschten Interface nahe.



  • Artchi schrieb:

    Ich denke, das was du meinst ist "ist implementiert mit"? Also analog zum Java-Interface?

    Weil dafür gibts dann in C++ die private "Vererbung" (hab ich extra in Anführungsstrichen!).

    Java-Interfaces haben weder mit "ist implementiert mit" noch mit privater Vererbung auch nur das geringste zu tun.

    class Hund : public Tier : private XYInterface
    {}
    

    In dem Fall ist Hund von Tier abgeleitet (Hund ist ein Tier) und hat die Implementierung XYInterface. Wobei das hier KEINE Mehrfachvererbung ist. Das klommt allerdings denke ich deinem gewünschten Interface nahe.

    Das ist ein Syntaxfehler. Solltest du class Hund: public Tier**,** private XYInterface gemeint haben: Natürlich ist das Mehrfachvererbung.



  • @Artchi
    Interface + private Vererbung ist ein widerspruch in sich. Ich glaube du sitzt hier einer furchtbaren Verwechslung auf.



  • Eher entschpricht "implements Interface" in Java der "public" Vererbung als der "private" Vererbung in C++.



  • implements in Java entspricht IMO der public Vererbung in C++ mit pure virtual Klassen.
    Ich benutze sowas, um bestimmte Eigenschaften sicherzustellen, in der Java-API kann man das ganz gut sehen. Da gibt es Interfaces wie Cloneable, Compareable, etc.



  • Optimizer schrieb:

    implements in Java entspricht IMO der public Vererbung in C++ mit pure virtual Klassen.
    Ich benutze sowas, um bestimmte Eigenschaften sicherzustellen, in der Java-API kann man das ganz gut sehen. Da gibt es Interfaces wie Cloneable, Compareable, etc.

    Stimmt. Nur ist Clonable eine der schlecht entworfenen Schnittstellen.



  • Optimizer schrieb:

    implements in Java entspricht IMO der public Vererbung in C++ mit pure virtual Klassen.
    Ich benutze sowas, um bestimmte Eigenschaften sicherzustellen, in der Java-API kann man das ganz gut sehen. Da gibt es Interfaces wie Cloneable, Compareable, etc.

    HumeSikkins schrieb:

    Es gibt keine "pure virtual Klassen".

    Da hab ich fast lust den Spruch "Wer lesen kann ist klar im Vorteil" zu bringen. 🙄



  • Da hab ich fast Lust, den Spruch "wer denken kann, wird es schon verstehen" zu bringen. 🙄



  • HumeSikkins schrieb:

    Es gibt keine "pure virtual Klassen".

    hm, dann hab ich wohl was verwechelt. was ist dann eine klasse, die etwa so aufgebaut ist:

    class MyClass
    {
        virtual void myFunc() = 0;
    }
    

    war es nicht so, dass man von diesen klassen keine instanz bilden kann, und sie deshalb irgendwie speziell heissen?
    *amschlauchsteh*



  • «abstrakt»



  • ah, danke 🙂


Anmelden zum Antworten