In der Beispiel-Klasse
Shape wurde
nichts weiter über die
Draw() Methode gesagt
geht auch nicht, weil
Shape diese Methode
nicht sinnvoll implementieren kann.
Was dann ?
Shape::Draw() { cout <<"Shapes can't draw ";}
Aber besser: Deklaration als
pure virtual Funktion
in
Class Shape { ...} mit
virtual Draw() = 0;
Die Existenz einer
pure virtual Funktion in einer Klasse hat drastische
Konsequenzen:
- Klasse wird zu einer
abstrakten Klasse.
Das bedeutet dass keine Instanzen der Klasse erzeugt werden können,
es kann kein
Shape s; angelegt werden, eben weil
die Klasse eine
pure virtual Funktion enthält.
- Jede konkrete Klasse, die von einer abstrakten Klasse erbt,
muss die
pure virtual functions überschreiben,
sonst Fehler beim kompilieren, wenn ein Objekt angelegt werden soll.
-
Aber: Pointer auf abstrakte Klassen sind möglich,
d.h. alle grafischen Objekte (Rechteck, ..) können in Array/Vektor
von Typ
Shape * gesteckt werden.
GDuckeck
2019-08-01