You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++多层继承多态疑问:子类未声明virtual为何调用孙类f()?

问题解答

这是因为C++中虚函数的特性具有继承性:一旦某个基类的函数被声明为virtual,那么所有派生类中重写的同签名(同名、同参数列表、同const属性)函数,都会自动成为虚函数,无需在派生类中显式添加virtual关键字。

具体到你的代码场景:

  • 基类parent的f()被声明为虚函数,这就为该函数开启了动态多态的特性。
  • 派生类child重写f()时,即便没有写virtual,编译器会默认它继承了基类的虚属性,本质上还是虚函数。
  • 进一步派生的grandchild类重写f(),同样继承了这个虚属性。

当你使用parent*类型的指针指向grandchild对象时,调用f()会触发动态绑定:程序会在运行时根据指针实际指向的对象类型(而非指针本身的类型),调用对应类的f()函数,因此最终执行的是grandchild::f()。

内容的提问来源于stack exchange,提问作者yingma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:21:01