Interfaces in C++



  • Nabend,

    ich möchte gerne mehrere Klassen in C++ schreiben, welche nur als "Interface" genutzt werden sollen. Da ich Java Programmierer bin, frage ich mich, wie man so etwas in C++ am besten realisiert?

    Diese Klassen sollen ja keinerlei Funktionalität bereitstellen, sondern nur virtuelle Methoden. Wäre folgendes ein guter Ansatz(in C++)?

    class ConnectionListener{
    
      public:
        ~ void method1();
        ~ void method2();
    
    }
    
    class TCPConnection : public Connection, public ConnectionListener{
    
    //In dieser Klasse werden dann die Methoden methode1() und methode2() implementiert.
    
    }
    

    Besten Dank im voraus!

    PS: Welchen Sinn ergeben eigentlich Strukturen in C++? Eine Struktur ist im endeffekt auch ein Objekt und somit wäre ja eine Klasse im Sinne der OOP besser(Kapselung).



  • Das Schlüsselwort Interface gibt es in C++ nicht. Du machst einfach eine abstracte Klasse, was ein "Interface" darstellt.

    Bsp.:

    class Auto
    {
       virtual void beschleunigen() = 0;
    };
    

    Wenn du jetzt davon ableitest, wird dir der Compiler einen Error melden, das du doch bitte beschleunigen() implementieren sollst.



  • Dein Ansatz ist richtig. Allerdings wäre ein virtueller Destruktor nicht schlecht...

    Strukturen sind nicht nur Klassen deren Elemente alle public sind, sondern auch ein Relikt aus alten C-Tagen - wobei da keine Methoden deklariert werden konnten. Und da waren das häufig Datenstrukturen, die man per Pointer Funktionen übergeben hat. OOP für Arme sozusagen.



  • Marc M. schrieb:

    ich möchte gerne mehrere Klassen in C++ schreiben, welche nur als "Interface" genutzt werden sollen. Da ich Java Programmierer bin, frage ich mich, wie man so etwas in C++ am besten realisiert?

    Mit Abstrakten Basisklassen.

    class ConnectionListener{
    
      public:
        virtual void method1() = 0;
        virtual void method2() = 0;
        virtual ~ConnectionListener() { }
    };
    
    1. Das ~ steht nur beim Destruktor.
    2. virtual vergessen
    3. rein-virtuelle Funktionen (abstrakte Methoden) sind durch = 0 gekennzeichnet.
    4. ein virtueller Destruktor ist bei Basisklassen und Polymorphie idR immer eine gute Idee.

    PS: Welchen Sinn ergeben eigentlich Strukturen in C++?

    In C++ definiert man mit struct ebenfalls Klassen, die sich von class-Klassen darin unterscheiden, dass die Zugriffsebene standardmäßig public statt private ist, und dass Vererbung wenn nicht anders gekennzeichnet public statt private erfolgt. class ist streng genommen überflüssig.



  • @ :)! Naja, in struct kann man schon Methoden implementieren. Nur ob es "logisch" ist, ist ne andere Frage. Denn der Compiler behandelt struct und class gleichwertig.



  • structs ohne Methoden muss die Sprache zumindest zwecks C-Kompatibilität können - sie müssen dann auch das gleiche Speicherlayout haben wie in C.


Anmelden zum Antworten