- Inkapsulation und Erweiterungsfaehigkeit der Typen
- Vererbung
- Polymorphismus
- Überladen
- Virtuelle Funktionen
- Statische Klassenmitglieder
- Funktionstemplates
- Klassentemplates
- Abstrakte Klassen
Abstrakte Klassen und rein virtuelle Funktionen
Abstrakte Klassen sind für die Erstellung generalisierter Entitäten bestimmt, aufgrund deren später konkretere abgeleitete Klassen erstellt werden. Eine abstrakte Klasse ist die Klasse, die nur als Basisklasse für eine andere Klasse genutzt werden kann. Aus diesem Grund kann man kein Objekt vom Typ abstrakter Klasse erstellen
Eine Klasse, die mindestens eine rein virtuelle Funktion enthält, gilt als abstrakt. Deswegen müssen Klassen, die von einer abstrakten Klasse abgeleitet wurden, alle ihre rein virtuellen Funktionen umsetzen, sonst werden sie auch als abstrakte Klassen gelten.
Eine virtuelle Funktion wird als "reine" mit der Syntax des Reinheit-Spezifikators deklariert. Schauen wir uns die CAnimal-Klasse an, die nur für die Gewährleistung allgemeiner Funktionen erstellt wird - Objekte vom Typ CAnimal sind zu allgemein für eine praktische Anwendung. So ist die CAnimal-Klasse ein guter Kandidat für abstrakte Klasse:
class CAnimal |
Die Sound()-Funktion ist hier rein virtuell, weil sie mit dem Spezifikator der rein virtuellen PURE-Funktion (=0) deklariert wurde.
Als rein virtuelle werden nur die virtuellen Funktionen bezeichnet, für welche der PURE-Spezifikator angegeben wurde, und zwar: (=NULL) oder (=0). Beispiel der Deklaration und Anwendung abstrakter Klassen:
class CAnimal
|
Begrenzungen für Anwendung abstrakter Klasse
Wenn der Konstruktor einer abstrakten Klasse die rein virtuelle Funktion (direkt oder indirekt) aufruft, wird das Ergebnis undefiniert sein.
//+------------------------------------------------------------------
|
Jedoch können Konstruktoren und Destruktoren abstrakter Klassen andere Memberfunktionen aufrufen.