导航
  • 全部
...

派生类中的虚函数可以访问父类的虚函数,机制是什么?

独酌逸醉 2012-07-11 02:14:34
看代码:

  1. virtual void dev_class::v_func1()
  2. {
  3. base_class::v_func1();
  4. cout << "This is dev_class's v_func1()" << endl;
  5. }


dev_class的虚函数表中,dev_class::v_func1()应该把base_class::v_func1()覆盖掉了,但是为什么还可以访问base_class::v_func1()呢?base_class::v_func1()的函数指针放在哪了呢?

求教,谢谢!
...全文
给本帖投票
1443 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
独酌逸醉 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

当派生类和父类有同名的虚函数的时候,派生类实际上并没有覆盖调父类的方法,当要访问父类同名方法的时候,可以通过base::method的方式调用!
[/Quote]
在派生类的虚函数表中,已经覆盖了。难道虚函数还存在另外一个位置吗?
逆道而行 2012-07-11
  • 打赏
  • 举报
回复

其实父类虚函数就是为了让子类继承并从新定义的
逆道而行 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

虚函数也是函数。子类的函数是可以调用父类的函数的。所以子类的虚函数是可以调用父类的虚函数的。vptr中是存放了虚函数的地址,但是并不是所有访问虚函数都得通过vptr。
有啥错误,敬请指正
[/Quote]

其它父类虚函数就是为了让子类继承并从新定义
一叶飞舟 2012-07-11
  • 打赏
  • 举报
回复
当派生类和父类有同名的虚函数的时候,派生类实际上并没有覆盖调父类的方法,当要访问父类同名方法的时候,可以通过base::method的方式调用!
skyabc 2012-07-11
  • 打赏
  • 举报
回复
1楼2楼正解,关键在于此处::的使用,和啥复杂的继承关系都没了
独酌逸醉 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

虚函数也是函数。子类的函数是可以调用父类的函数的。所以子类的虚函数是可以调用父类的虚函数的。vptr中是存放了虚函数的地址,但是并不是所有访问虚函数都得通过vptr。
有啥错误,敬请指正
[/Quote]
好的,谢谢!
W170532934 2012-07-11
  • 打赏
  • 举报
回复
虚函数也是函数。子类的函数是可以调用父类的函数的。所以子类的虚函数是可以调用父类的虚函数的。vptr中是存放了虚函数的地址,但是并不是所有访问虚函数都得通过vptr。
有啥错误,敬请指正
独酌逸醉 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个不通过虚函数指针来调用, 和普通函数调用一样, 编译器直接把函数地址插入到调用的地方.
[/Quote]
谢谢你的回复。

base_class::v_func1();不是虚函数吗?虚函数不应该存放在 vtable 中吗?
pathuang68 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个不通过虚函数指针来调用, 和普通函数调用一样, 编译器直接把函数地址插入到调用的地方.
[/Quote]

赞同,这个调用已经和虚函数表没啥关系了。
www_adintr_com 2012-07-11
  • 打赏
  • 举报
回复
这个不通过虚函数指针来调用, 和普通函数调用一样, 编译器直接把函数地址插入到调用的地方.

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部