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

老师好,麻烦问一下关于父子类同名函数的访问的问题

在2-7节 析构函数与虚析构函数中,有说如果父类子类的同名函数都是虚函数时,那么虚函数表中的函数地址会被新函数地址(相应对象的函数地址)所覆盖,这一点我是理解的,但所不理解的是,如果这两个函数不是虚函数,那么我们就可以访问,父类和子类两个同名的函数,虚函数表或者是其他表还存在吗?如果存在他们的存放顺序和访问原理是怎样的?

正在回答

2 回答

不是虚函数那就不存在于虚函数表中,至于虚函数表是否存在,取决于还有没有其余的虚函数(包括从父类继承来的虚函数)。至于父类与子类的虚函数如何存放,好像是子类的新的虚函数会添加在父类的虚函数表后面作为子类的虚函数表,如果我么记错的话,应该是这样。

0 回复 有任何疑惑可以回复我~

虚函数表都存在,因为子类父类都存在虚函数。正是因为覆盖了父类的同名函数,所以在子类的虚函数表中,对应父类同名函数的相同位置的虚函数指针替换了从父类继承而来的虚函数指针,所以如果通过父类的指针来访问子类对象时,由于子类对象的虚函数表中的相同位置的虚函数已经做了替换,故实际调用的是覆盖了子类虚函数

0 回复 有任何疑惑可以回复我~
#1

慕粉0857448105 提问者

假如这个同名函数不是虚函数呢?这个虚函数表是否还存在?如果存在,与父类和子类所对应的函数地址又是如何存放的呢?
2017-03-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66223    人
  • 解答问题       334    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

老师好,麻烦问一下关于父子类同名函数的访问的问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号