Mega Code Archive

 
Categories / C++ / Development
 

Use dynamic_cast to replace typeid

#include <iostream> #include <typeinfo> using namespace std; class Base { public:   virtual void f() {}  }; class Derived : public Base { public:   void derivedOnly() {     cout << "Is a Derived Object.\n";   } }; int main() {   Base *bp, baseObject;   Derived *dp, d_ob;   //////////////////////////////////////////////////////// use typeid   bp = &baseObject;   if(typeid(*bp) == typeid(Derived)) {     dp = (Derived *) bp;     dp->derivedOnly();   }   else      cout << "Cast from Base to Derived failed.\n";   bp = &d_ob;   if(typeid(*bp) == typeid(Derived)) {     dp = (Derived *) bp;     dp->derivedOnly();   }   else     cout << "Error, cast should work!\n";   /////////////////////////////////////////////////////// use dynamic_cast   bp = &baseObject;   dp = dynamic_cast<Derived *> (bp);   if(dp)       dp->derivedOnly();   else       cout << "Cast from Base to Derived failed.\n";   bp = &d_ob;    dp = dynamic_cast<Derived *> (bp);   if(dp) {      dp->derivedOnly();   }else     cout << "Error, cast should work!\n";   return 0; }