Dynamic_cast

// RTTI_CAST.cpp : Defines the entry point for the console application.
//

/// Summary:
///   There must have inheritress between Source type and target type.
///   if not, static_cast will bring compile error; 
///     dynamic_cast will return false or throw exception.

#include <iostream>
using namespace std;

class A
{
public:
 A(int j = 0): i(j)
 {

 }
 
 virtual ~A() {}

 virtual void Output()
 {
  cout<< i;
 }
private:
 int i;
};

class B : public A
{
public:
 B() : A(1),j(2)
 {

 }

 virtual ~B() {}

 virtual void Output()
 {
  A::Output();

  cout<< j<<endl;
 }
private:
 int j;
};


int _tmain(int argc, _TCHAR* argv[])
{
 char a = 'a';
 int * pI = static_cast<int*>(&a); // failed.

 B b;

 A* pA = dynamic_cast<A*>(&b);

 pA->Output();
 
 const type_info& aInfo = typeid(A);
 const type_info& bInfo = typeid(B);
 
 try
 {
  B* pB = dynamic_cast<B*>(pA);

  pB->Output();
 }
 catch(bad_cast& e)
 {
  std::cout<<e.what()<<endl;
 }
 

 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值