您的位置:首页 > 编程语言 > C语言/C++

C++ dynamic_cast 的使用

2015-05-25 19:49 106 查看
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{
// 转化没有成功,则没有扩充的方法
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: