为了账号安全,请及时绑定邮箱和手机立即绑定

关于c++一个多态的问题

关于c++一个多态的问题

C++
摇曳的蔷薇 2018-07-05 15:10:51
A派生B,B派生C,现在A,B,C都有一个disp函数(同名同参)用来输出自己的类名。现在是这样的C *c = new C;B *b = c; //注意这里用的是Bb->disp(); //当A,B,C的disp函数都不用virtual修饰,输出结果是B//如果只给A的disp函数使用virtual修饰,我本来以为还是输出B,但实际上输出了C。那么为什么?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

你其实对virtual关键字的继承关系有误解。你的直观感觉是“我只给A的disp函数添加了virtual修饰”,但事实是,由于编译器检测到B中的disp()函数是A中的虚函数disp的重载形式,该函数也自动成为virtual函数,不论你是否显式声明了virtual关键字。然后,根据继承关系,C中的disp也同理。

查看完整回答
反对 回复 2018-07-31
  • 1 回答
  • 0 关注
  • 652 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信