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{

       // 转化没有成功,则没有扩充的方法

    }

}

 

你可能感兴趣的:(dynamic)