Use dynamic_cast to replace typeid. : Dynamic Cast « Development « C++






Use dynamic_cast to replace typeid.

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;
}


           
       








Related examples in the same category

1.Demonstrate dynamic_cast: base and derived classDemonstrate dynamic_cast: base and derived class