求解:C++里面的向下转换类型,请举例详细说明,谢谢!
在C++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换
向下强制类型转换
使用dynamic_cast进行向下强制类型转换。使用此关键字有一下几个条件:
1、必须有虚函数;
2、必须打开编译器的RTTI开关(vc6: progect-> settings -> c/c++ tab ->category[c++ language]-> Enable RTTI);
3.必须有继承关系。
Base *b = new Derived;Derived *d = dynamic_cast<Derived*>(b);if(!d){cout << "dynamic cast err!"<<endl;}else{d->Test();}
本例子中,符合以上条件,转换成功。否则,会抛出std::bad_cast异常,转换返回NULL。
因此,我们可以使用dynamic_cast来判断两个类是否存在继承关系。
最典型的向下类型转换。
/ 入口
int testEntrance()
{
Son son;
Daughter daughter;
Parent* m_parent = new Parent();
Parent* oldParent = m_parent;
m_parent = &daughter;
m_parent->test();
m_parent = &son;
m_parent->test();
delete oldParent;
return 0;
} // end function
不过一般来说,要用到向下强制转换,都需要考虑一下,是不是设计上有问题,是否有更好的选择。很多情况下,我们都可以使用虚函数来解决这类问题。
参考资料:http://wenku.baidu.com/view/7988f4d126fff705cc170aaf.html
http://baike.baidu.com/view/3975627.htm
2013 5 20 11:47
2013-05-20