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也同理。
- 1 回答
- 0 关注
- 652 浏览
添加回答
举报
0/150
提交
取消