In C++ gibt es kein Konzept der "Schnittstelle" per se. AFAIK wurden Schnittstellen zuerst in Java eingeführt, um das Fehlen der Mehrfachvererbung zu umgehen. Dieses Konzept hat sich als sehr nützlich erwiesen, und der gleiche Effekt kann in C++ durch die Verwendung einer abstrakten Basisklasse erzielt werden.
Eine abstrakte Basisklasse ist eine Klasse, in der mindestens eine Mitgliedsfunktion (Methode im Java-Jargon) eine rein virtuelle Funktion ist, die mit der folgenden Syntax deklariert wird:
class A
{
virtual void foo() = 0;
};
Eine abstrakte Basisklasse kann nicht instanziiert werden, d. h. Sie können kein Objekt der Klasse A deklarieren. Sie können nur Klassen von A ableiten, aber jede abgeleitete Klasse, die keine Implementierung von foo()
wird auch abstrakt sein. Um nicht mehr abstrakt zu sein, muss eine abgeleitete Klasse Implementierungen für alle reinen virtuellen Funktionen bereitstellen, die sie erbt.
Beachten Sie, dass eine abstrakte Basisklasse mehr sein kann als eine Schnittstelle, da sie Datenmitglieder und Mitgliedsfunktionen enthalten kann, die nicht rein virtuell sind. Ein Äquivalent zu einer Schnittstelle wäre eine abstrakte Basisklasse ohne Daten mit nur rein virtuellen Funktionen.
Und wie Mark Ransom betonte, sollte eine abstrakte Basisklasse einen virtuellen Destruktor bereitstellen, wie jede andere Basisklasse übrigens auch.