01 // Typkonvertierung - dynamische Wandlung
02 // Datei: dynaca1.cpp
04
#include <iostream.h>
05 #include <typeinfo.h>
07 class Basis
08 {
09 // RTTI
nur bei polymorphen Klassen
10 virtual void methode(void) { }
11 };
13 class
Abgeleitet : public Basis
14 { };
16 int main(void) {
17 try {
18 Basis b;
19
Abgeleitet d, *pd;
20 Basis *bp1 = &d;
21 // Basis1-Zeiger nach Abgel. "herunter"-wandeln.
22
if ((pd =dynamic_cast<Abgeleitet *>(bp1)) !=0)
23 cout << "Ergebnistyp:
** "
24 << typeid(pd).name() << " **" <<endl;
25 else
26 cerr << "Fehlerhafte
Wandlung 1" << endl;
27 if ((pd=dynamic_cast<Abgeleitet *>(&b)) != 0)
28
cout<<"Ergebnis 2 : "<<typeid(pd).name()<<endl;
29 else
30 cerr << "Fehlerhafte
Wandlung 2" << endl;
31 }
32 catch (Bad_cast) { // Standard: bad_cast
33 cout
<< "dynamic_cast hat versagt" << endl;
34 return 1;
35 }
36 catch (...) {
37
cout <<"Keine Exception-Behandlung."<< endl;
38 return 1;
3