dynamic_cast 的一些用途

Code:
  1. 要使用dynamic_cast动态类型转换,必须满足下面条件:      
  2. 1、基类至少要有一个虚函数      
  3. 2、需要多态性      
  4. 3、编译器打开RTTI检查      
  5.      
  6. dynamic_cast功能:      
  7. 当某些情况下不能使用运行时多态的时候,就可以用dynamic_cast代替,例如:      
  8. struct Base      
  9. {      
  10.     virtual void func(){}      
  11. };      
  12.      
  13. struct D : public Base      
  14. {      
  15.     void func(){}      
  16.     void f(){}      
  17. };      
  18.      
  19. void test(Base* b)      
  20. {      
  21.     /* 如果要进行强制转换,则需要保证转换是正确的。 */     
  22.     if(D* d = dynamic_cast<D*>(b))      
  23.         d->f();      
  24.     else     
  25.         cout << "change fail !" << endl;      
  26. }      
  27.      
  28. void main()      
  29. {      
  30.     /*     
  31.         d通过函数test进行传参,通过转换变为Base类型的指针    
  32.         如果想转换回之前指向D类的指针,可以使用强制转换    
  33.         但这个转换必须是我们知道的,如果转换失败,则返回    
  34.          0。如果是引用转换失败,抛出bad_cast异常。    
  35.      */     
  36.     D* d = new D;      
  37.     test(d);      
  38. }    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值