lightblueme

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

C++ dynamic_cast 的使用

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{
       // 转化没有成功,则没有扩充的方法
    }
}

 

posted on 2015-05-25 19:49  lightblueme  阅读(396)  评论(0编辑  收藏  举报