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() { } };
- Das ~ steht nur beim Destruktor.
- virtual vergessen
- rein-virtuelle Funktionen (abstrakte Methoden) sind durch = 0 gekennzeichnet.
- 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.