dynamic_cast介绍
来源:互联网 发布:腾牛网qq骂人软件 编辑:程序博客网 时间:2024/06/07 02:33
dynamic_cast<type-id>(expression)
这个表达式将
如果
class B { ... };
class C : public B { ...};
class D : public C { ...};
void f(D* pd)
{
}
这个类型转换叫做向上转型,因为它将一个指针在其继承层次向上转型,即从一个继承类到其基类。向上转型是隐式转换。
如果
class A { ... };
class B { ... };
void f()
{
}
如果
如果
class B { ... };
class D : public B { ...};
void f()
{
}
向下类型转换之所以这么说是因为其从类继承层次的父类向子类转换。
在多重继承的情况,可能导致二义性。看一下下面的类继承层次:
指向类型D的指针转换为B或C都正常,但如果从D转换到A将会怎么样来?这个结果导致转换的二义性错误;为了结果这个问题,你可以指向两次明确的转型,例如:
void f()
{
}
在使用虚基类的时候就导致更复杂的模糊;看下面的类层次图:
在这个继承层次中,A是虚基类。假定一个类E的实例并且一个指向A子对象的指针,一次到B的dynamic_cast会由于不明确性导致失败,你必须首先转换到适当的层次,然后再向上转换到确定的层次,一直按照这种方式直到到达正确的B对象。
看下面的类层次图:
假定一个类型E的对象和一个指向D子对象的指针,从D子对象导航到左上A子对象,必须执行三个转换。从D到E的dynamic_cast的转换,然后一个从E到B的转换(可以是dynamic_cast或者隐式转换),最终是从B到A的转换,例如:
void f(D* pd)
{
}
dynamic_cast
由于交叉转换,从
void f(D* pd)
{
}
一个
当使用
class A { ... };
class B { ... };
void f()
{
}
转换失败的指针类型是- 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成…
- enum类型的本质
- enum类型的本质
- C++访问控制-三种继承方式
- C++访问控制-三种继承方式
- dynamic_cast介绍
- dynamic_cast介绍
- RTTI、虚函数和虚基类的开销分析及…
- RTTI、虚函数和虚基类的开销分析及…
- typeid详解
- typeid详解
- 整数溢出,如何判断整数溢出
- 整数溢出,如何判断整数溢出
- typedef与define