C++中dynamic_cast用于类继承层次间的转换(包括类指针和类引用的转换),既可以将基类类型转换成派生类类型,也可将派生类类型转换成基类类型,其语法为:
dynamic_cast<new_type>(expression)
不过常用的还是向下转换,因为dynamic_cast会对转换进行安全检查,至于向上转换一般会用其它强制类型转换操作符(考虑到dynamic_cast的效率),具体事例如下:
class Base {
public:
Base() {};
virtual void test() {
cout<<"this is base class"<<endl;
}
};
class Derived:class Base {
public:
Derived() {};
void test() {
cout<<"this is derived class"<<endl;
}
};
对于向下转换,有两种情形,第一种是基类指针或引用对象是派生类类型,即:
//指针
Base* base_p = new Derived();
Derived* derived_p = dynamic_cast<derived*>(base_p);
derived_p->test(); //输出“this is derived class”
//引用
Derived derived_q;
Base& base_q = derived_q;
Derived& derived_q2 = dynamic_cast<derived*>(base_q);
derived_q2.test(); //输出“this is derived class”
而对于第二种情形,即基类指针或引用对象是基类类型,则会转换失败,即dynamic_cast中new_type和expression需是同一类型转换才会成功。