Polymorphismus: Datentyp ermitteln
-
Hallo.
Ich habe eine Basisklasse und die daraus abgeleiteten Klassen. Wenn ich nun ein Array von Zeigern auf die Basisklasse erstelle und durch Bedingungen diverse Objekte von den abgeleiteten Klassen dem Array hinzufuege, ist es dann irgendwie moeglich den Datentyp eines Array-Elements zu ermitteln? (Datentyp steht zur Laufzeit nicht fest)
So aehnlich habe ich mir das vorgestellt:Basisklasse* bp[10]; bp[0] = new AbgeleiteteKlasse1; bp[1] = new AbgeleiteteKlasse1; if (bp[0] ist vom Datentyp AbgeleiteteKlasse1) machwas;Gruss
Cartman
-
Du könntest
if (dynamic_cast<datentyp>)machen;dynamic_castgibt 0 zurück falls es nicht funktioniert. Oder du könntesttypeidbenutzen.MfG
-
Danke

gruss
Cartman
-
normalerweise muss man allerdings nicht wissen von welchem abgeleiteten Typ ein spezielles Objekt ist. Aktionen die für die Klasse des Objektes speziell sind sollten meistens auch innerhalb der entsprechenden Klasse implementiert sein. Dann ruft man einfach die entsprechende Methode auf und die abgeleiteten Klassen wissen selbst was zu tun ist. Das ist der Sinn von Polymorphismus und virtuellen Funktionen.
Dein Beispiel sähe dann so aus:class Basisklasse { public: virtual void ClassSpecificAction() {} //default-implementierung: nichts tun }; class AbgeleiteteKlasse1 : public Basisklasse { public: void ClassSpecificAction() { machwas(); } }; int main() { Basisklasse* bp[10]; bp[0] = new AbgeleiteteKlasse1; bp[1] = new AbgeleiteteKlasse1; //if (bp[0] ist vom Datentyp AbgeleiteteKlasse1) machwas; bp[0]->ClassSpecificAction(); }