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虚函数无法解决的问题。下面的例子详细说明这个问题。
类库的生产商提供了上面的代码实现,提供的方式是头文件和lib,没有源码文件。但是这是我们想对derivative类进行扩充,增加fun2()函数,由于我们没有源码,因此无法修改。这时使用dynamic_cast可以做到。
具体办法是:
step 1: 在derivative的头文件当中添加void fun2()的声明
step 2: 在任意一个源文件当中实现该方法
在调用时使用下面的方式来加以调用
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{ // 转化没有成功,则没有扩充的方法 } }
相关文章推荐
- reinterpret_cast const_cast dynamic_cast static_cast 区别使用【zhuan】
- cast使用
- SQL Server 2000 函数使用---CAST 和 CONVERT
- 第一次使用xxx_cast的小经验
- C++中static_cast, dynamic_cast使用方法
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- 使用hadoop进行排序时报错 Error: java.lang.ClassCastException
- SQL Server 2000 函数使用---CAST 和 CONVERT
- C++ 中dynamic_cast<>的使用方法
- vector中使用拷贝构造函数和解除const的关键字const_cast介绍
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- 使用网上流传的一个数据库连接池在Proxy.newProxyInstance处引起 java.lang.ClassCastException 问题的解决方法
- 理解C++ dynamic_cast
- 使用Rowset时出现的ClassCast的解决方法
- sql中charindex和cast结合使用
- Unity 使用物理射线(Physics.Raycast),实现扇形区域碰撞检测三种方法
- 史上最简单的c++四种cast使用教程
- 使用dynamic_cast强制将基类指针转换成子类指针
- sql,scope_identity,procedure,tran,substring,cast,convert,charindex,插入角色的同时插入角色拥有的权限,权限使用权限列表表示,列表用逗号分隔权限的id,更新角色信息,同时更新权限信息
- QString转换为LPTSTR(使用了reinterpret_cast,真是叹为观止,但是也开阔了思路),三篇文章合起来的各种转换方法