Replacing typeid with dynamic_cast : cast « Class « C++






Replacing typeid with dynamic_cast

   
#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, b_ob;
  Derived *dp, d_ob;
   
  bp = &b_ob;
  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 = &b_ob;
  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.Don't need a cast to go up the inheritance hierarchy
2.class type-casting
3.The const_cast operator is used to explicitly override const and/or volatile in a cast.
4.Use const_cast on a const reference.Use const_cast on a const reference.
5.The static_cast operator performs a nonpolymorphic cast.
6.The reinterpret_cast operator converts one type into a fundamentally different type.
7.The dynamic_cast performs a run-time cast that verifies the validity of a cast.