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 ... |