码迷,mamicode.com
首页 > 编程语言 > 详细

C++ dynamic_cast 的使用

时间:2015-05-25 20:20:23      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

C++中的dynamic_cast 执行运行时刻类型转换,起作用有点类似于Java当中的instance of

reference:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html

它的特点可以执行运行时刻类型检查,从而更加安全;另一方面还有一些小trick,可以弥补virtual虚函数无法解决的问题。下面的例子详细说明这个问题。

class base{
 public:
      int data;
      virtual void fun();  
}

class derivative: public  base{
public:
      int data;
      void fun();
}

类库的生产商提供了上面的代码实现,提供的方式是头文件和lib,没有源码文件。但是这是我们想对derivative类进行扩充,增加fun2()函数,由于我们没有源码,因此无法修改。这时使用dynamic_cast可以做到。

具体办法是:

step 1: 在derivative的头文件当中添加void fun2()的声明

step 2:  在任意一个源文件当中实现该方法

void derivative::fun2(){
       //do something
}

在调用时使用下面的方式来加以调用

int main(){
    Base * b = new Derivative();
    Derivative * d =dynamic_cast<Derivative>(b);
    if(d){
        // 转换成功,并且此时derivative类型的指针d,可以使用扩充的方法
    }else{
       // 转化没有成功,则没有扩充的方法
    }
}

 

C++ dynamic_cast 的使用

标签:

原文地址:http://www.cnblogs.com/lightblueme/p/4528702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!