求解:C++里面的向下转换类型,请举例详细说明,谢谢!

 我来答
ok洛阳水席
2013-05-20 · TA获得超过1839个赞
知道小有建树答主
回答量:580
采纳率:50%
帮助的人:526万
展开全部

在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
展开全部
你图片没有上传成功吧? 看不到你的问题。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式