标签:
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{ // 转化没有成功,则没有扩充的方法 } }
标签:
原文地址:http://www.cnblogs.com/lightblueme/p/4528702.html