elemente der basisklasse speichern.
-
hallo!
ich habe eine Klasse namens geoObject. von dieser Klasse erben die beiden Klassen Quadrat und Rechteck.
Nun will ich ein Array mit 10 geoObjekten erstellen. Diese können sowohl vom Typ Quadrat als auch vom Typ Rechteck sein.
Ich komme leider aus der C#-Ecke wo das alles ganz einfach geht. Vermutlich hapert es bei mir nur an der Syntax.
Gibt es eine möglichkeit ein Quadrat in ein geoObject zu casten und dann somit das Array vom Typ geoObject zu machen?
Hoffe ihr versteht was ich meine!
Danke!
-
tm200014 schrieb:
Nun will ich ein Array mit 10 geoObjekten erstellen. Diese können sowohl vom Typ Quadrat als auch vom Typ Rechteck sein.
Das geht in C++ nicht. Polymorphie hast du in C++ nur mit Zeigern und Referenzen, nicht mit Objekten.
tm200014 schrieb:
Ich komme leider aus der C#-Ecke wo das alles ganz einfach geht.
In C# ist jedes "Objekt" in Wirklichkeit erst einmal ein Zeiger, das Objekt dazu musst du ja mit new erst erzeugen.
-
Ich habe neulich boost::ptr_vector<base_class> verwendet. Polymorphie erfordert Indirektion. In C# wird dir Indirektion für alle Klassentypen aufgezwungen ("reference types"). In C++ musst Du sie explizit einfordern. boost::ptr_vector speichert zB die Objekte nicht direkt, sondern indirekt über Zeiger.