关于C++虚函数的一个蠢蠢的问题 10

假设有基类a,a的派生类b,b的派生类ca中有虚成员函数x()在b中和c中都分别声明了原型相同的x()当我用基类指针p指向派生类b然后用p调用x()此时调用的是b中的x(... 假设 有基类a,a的派生类b,b的派生类c
a中有 虚成员函数 x()
在b中和c中都分别声明了 原型相同 的x()

当我用基类指针p 指向 派生类b
然后用p 调用 x()
此时调用的是 b中的x()还是c中的x()?
换句话说就是 虚函数的覆盖关系 是由最后一层覆盖前面所有 还是看 调用到哪一层?
展开
 我来答
老冯文库
2017-06-25 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8733

向TA提问 私信TA
展开全部

此时调用的是b类的x()函数。

A *p;
p = new B();
p->x();            //一定是调用B类的x()方法,因为p是B类对象
((A *)p)->x();        //仍然调用B类的x()方法,理由同上


A p;
p = B();
p.x();                         //调用A类的x()方法,因为p是A类对象,即使使用B类构造
((A)p).x();                    //调用A类的x()方法,理由同上
AjokeUknow
2017-06-25 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:80
采纳率:0%
帮助的人:32.3万
展开全部
指针指向b的对象的话,调用的就是b里面实现的函数啊,调用哪一个函数取决于具体的对象到底是哪一个类的对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式