dynamic_cast
来源:互联网 发布:mac 修复flash player 编辑:程序博客网 时间:2024/06/03 11:15
Converts the operand expression to an object of type type-id.
将操作数 expression 转换为类型type-id对象。
dynamic_cast < type-id > ( expression )
For example:
D* pd = new D; C* pc = dynamic_cast<C*>(pd); B* pb = dynamic_cast<B*>(pd);
主要应用于子类向父类的转换,而父类向子类转换则会产生异常,在bad_cast一文中有其对比
这种属于上行转换,如果type-id 是viod*类型,则靠后面的expression判断其类型
class A {virtual void f();};class B {virtual void f();};void f() { A* pa = new A; B* pb = new B; void* pv = dynamic_cast<void*>(pa); // pv now points to an object of type A pv = dynamic_cast<void*>(pb); // pv now points to an object of type B}
如果 expression 的类型是 type-id类型的基类,则运行时检查进行查看 expression 是否指向实际 type-id的类型的完整对象。如果为 true,则结果是指向type-id的类型的完整对象
#include <typeinfo.h>#include <iostream>using namespace std;class B {virtual void sum(int a,int b){}};class D : public B {virtual void sum(int a,int b){}};int main() { B* pb = new D; // unclear but ok B* pb2 = new B; try { D* pd = dynamic_cast<D*>(pb); // ok: pb actually points to a D D* pd2 = dynamic_cast<D*>(pb2); // pb2 points to a B not a D }catch (bad_cast b) { cout << "Caught: " << b.what(); } return 0; }
- dynamic_cast
- Dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- dynamic_cast
- const_cast,dynamic_cast,reinterpret_cast,static_cast
- cgroup学习(四)——mount hierarchy
- poj 2031 -- Building a Space Station(最小生成树)
- Struts2源码阅读(六)_ActionProxy&ActionInvocation
- Subversion系统的冗余及备份- 有感于中国银行IBM大型机宕机事件
- dynamic_cast
- 悲剧的各种 java webservice
- Qt的相关Pointer(1)-----QPointer
- 水星Mercury路由器端口映射设置图文方法
- Linux下yum安装MPlayer 或 LVC视频播放器
- s1 episode1(一)
- CentOS Linux搭建独立SVN Server全套流程
- HTTP Headers for Dummies
- [Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较