C++ Schnittstelle (Abstrakte Klasse)
Eine Schnittstelle beschreibt das Verhalten und die Funktionalität einer Klasse, ohne die spezifische Implementierung der Klasse zu erfordern.
C++-Schnittstellen werden mithilfe vonAbstrakte Klasseabstrakten Klassen implementiert. Abstrakte Klassen und Datenabstraktion sind nicht zu verwechseln; Datenabstraktion ist ein Konzept, das Implementierungsdetails von zugehörigen Daten trennt.
Wenn mindestens eine Funktion in einer Klasse als rein virtuelle Funktion deklariert ist, dann ist die Klasse eine abstrakte Klasse. Eine rein virtuelle Funktion wird durch die Verwendung von "= 0" in ihrer Deklaration angegeben, wie unten gezeigt:
EntwurfAbstrakte KlasseDer Zweck einer abstrakten Klasse (oft ABC genannt) besteht darin, eine geeignete Basisklasse bereitzustellen, von der andere Klassen erben können. Abstrakte Klassen können nicht zum Instanziieren von Objekten verwendet werden; sie können nur alsSchnittstelleSchnittstellen. Der Versuch, ein Objekt einer abstrakten Klasse zu instanziieren, verursacht einen Kompilierungsfehler.
Daher muss eine Unterklasse einer ABC, wenn sie instanziiert werden soll, jede rein virtuelle Funktion implementieren. Das bedeutet auch, dass C++ die Verwendung von ABCs zum Deklarieren von Schnittstellen unterstützt. Wenn Sie versuchen, ein Objekt einer solchen Klasse zu instanziieren, ohne die rein virtuellen Funktionen in der abgeleiteten Klasse zu überschreiben, tritt ein Kompilierungsfehler auf.
Eine Klasse, die zum Instanziieren von Objekten verwendet werden kann, heißtkonkrete Klasse。
Eine Instanz einer abstrakten Klasse
Siehe das folgende Beispiel. Die Basisklasse Shape stellt eine SchnittstellegetArea(), die jeweils in den beiden abgeleiteten Klassen Rectangle und Triangle alsgetArea() implementiert wird, bereit:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Total Rectangle area: 35 Total Triangle area: 17
Aus dem obigen Beispiel können wir sehen, wie eine abstrakte Klasse eine Schnittstelle getArea() definiert und wie zwei abgeleitete Klassen dieselbe Funktion durch unterschiedliche Algorithmen zur Flächenberechnung implementieren.
Entwurfsstrategie
Ein objektorientiertes System kann eine abstrakte Basisklasse verwenden, um eine geeignete, gemeinsame, standardisierte Schnittstelle für alle externen Anwendungen bereitzustellen. Durch Vererbung von der abstrakten Basisklasse erben abgeleitete Klassen dann alle ähnlichen Operationen.
Die von externen Anwendungen bereitgestellten Funktionen (d. h. öffentliche Funktionen) existieren als rein virtuelle Funktionen in der abstrakten Basisklasse. Diese rein virtuellen Funktionen werden in den entsprechenden abgeleiteten Klassen implementiert.
Diese Architektur erleichtert auch das Hinzufügen neuer Anwendungen zum System, selbst nachdem das System definiert wurde.
Weitere Erweiterungen