设为首页 加入收藏

TOP

9.7 类类型之间的强制转换
2013-10-07 12:42:48 来源: 作者: 【 】 浏览:64
Tags:9.7 类型 之间 强制 转换

9.7  类类型之间的强制转换

我们在前面看到,派生类对象的地址可以存储在基类类型的变量中-- 比如CContainer*类型的变量就可以存储CBox对象的地址。那么,如果有一个地址存储在CContainer*类型的指针中,可以将其强制转换为CBox*类型吗?当然可以,dynamic_cast运算符就是专门执行此类操作的。下面是该运算符的工作过程:

  1. CContainer* pContainer = new CGlassBox(2.0, 3.0, 4.0);  
  2. CBox* pBox = dynamic_cast<CBox*>( pContainer);  
  3. CGlassBox* pGlassBox = dynamic_cast<CGlassBox*>( pContainer); 

第一条语句将在堆上创建的CGlassBox对象的地址存入一个CContainer*类型的基类指针。第二条语句将类层次结构中底层的pContainer强制转换为CBox*类型。第三条语句将pContainer中的地址强制转换为实际的类型CGlassBox*。

我们不仅可以对指针,也可以对引用应用dynamic_cast运算符。dynamic_cast与static_cast之间的区别在于,dynamic_cast运算符在运行时检查转换的有效性,而static_cast运算符则不然。如果dynamic_cast操作无效,则结果为空。编译器依赖编程(www.cppentry.com)人员来保证static_cast操作的有效性,因此我们应该总是使用dynamic_cast在类层次结构中执行向上和向下的强制转换操作,如果还希望避免程序因使用空指针而意外终止,那么还应该检查转换的结果是否为空。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.4.6 实现对话框切换(1) 下一篇9.9.5 类和程序集(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: