Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Objekte unterschiedlicher Klassen in einem Vektor abspeichern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.03.2004, 14:16 Uhr
~Dirk23
Gast


Hi,

ich möchte Objekte unterschiedlicher Klassen in einem Vektor abspeichern. Erst habe ich den Versuch gemacht eine abstrakte Basisklasse zu definieren und davon mehrere Klassen abzuleiten.
Das Problem dabei war, dass immer jede abgeleitete Klasse alle abstrakten Funktionen überschreiben musste. Und das will ich nicht. Denn die eine abgeleite Klasse sollte beispielsweise 2 Funktionen der abstrakten Basisklasse enthalten. Die nächste abgeleitete Klasse z.B. wiederum 2 andere, ...
Aber so geht das dann natürlich nicht.
Meine Frage also: Wie kann ich Objekte von Klassen, die unterschiedliche Funktionen und Membervariablen enthalten können, dennoch gemeinsam in einem Vektor abspeichern.

Vielen Dank schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.03.2004, 15:32 Uhr
~(un)wissender
Gast


Behandel einen Vektor niemals polymorph!
Du hast da höchstens die Möglichkeit Pointer zu speichern, keine Objekte.
Die Antwort auf deine Frage lautet also: es nicht möglich in einem Vektor Objekte unterschiedlichen Typs zu speichern.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.03.2004, 12:38 Uhr
RHBaum



1. Das erste Problem ist in deiner Klassenhirarchie ! Stell Dir ne Basisklasse wie ne Schnittstellen-Vorschrift vor. Willst du in einer deiner Abgeleiteten Klasse eine Funktion nicht drin haben, darf sie natuerlich nicht in den Basisklassen auftauchen.
Notfalls Vererbe Mehrstufig, sowas wie Lebewesen<-Tier<-Saeugetier<-Katze
und Lebewesen<-Tier<-Vogel<-Wellensittich ist durchaus ueblich ....
Hast du eine abstrakte Funktion nicht definiert, ist / bleibt deine Klasse auch abstrakt = nicht instanzierbar.

2. polymorphy geht nur uber Pointer .... (naja, und referenzen, aber das ist ned wirklich ueblich, glaub ich) willst du also Members polymorph behandeln, musst du mit Zeigern arbeiten. Raw Pointer (CMyclass *) gehen ganz gut, besser ist du bausst dir inteliggentere Zeiger oder nimmst vorhande (sog. SmartPointer) .... Aber vorsicht, nicht alle Smartpointer sind fuer Container geeignet ! (krasses Beispiel ist gleich der einzige smartpointer(auto_ptr<>, den dir die STL selber liefert :-) ).

am ende sehen deine Container dann so aus :

std::list<CMyClass * > myList;
oder
std::list<MyCoolSmartPointer<CMyClass> > myList;
aber nicht
std::list<std::auto_ptr<CMyClass> > myList;

Warum Intelligente Zeiger so viel besser sind wie rohe Zeiger, ist nen anderes Kapitel :p Zum Ueben gehen rohe zeiger auch, zumal es ned so leicht ist, ne gute Smartpointerklasse fuer den jeweiligen Anwendugsfall zu finden.

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.03.2004, 15:47 Uhr
~Dirk23
Gast


Danke für die Antwort. Hab es inzwischen hingekriegt. Diese Polymorphie und Casting kann wirklich praktisch sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: