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

被重写的纯虚函数是否默认带virtual属性?C++ override使用疑问

C++虚函数继承规则答疑

你的猜想是正确的,该现象完全符合C++标准的规定,核心逻辑如下:

  • 只要成员函数在继承链的上层基类中被显式声明为virtual,那么所有派生类中重写该函数的对应成员函数,无论是否显式标注virtual关键字,都默认具备虚属性,该属性会沿着继承链永久传递。

对应你给出的代码场景:

  1. 顶层基类Shape的getArea()已经被显式声明为纯虚函数(带virtual关键字和= 0标识),该函数的虚属性会向下传递给所有派生类。
  2. Square类中的getArea()通过override关键字完成了对Shape类虚函数的重写,此时即使没有手动加virtual,Square::getArea()本身依然是虚函数。
  3. FunnySquare继承自Square,FunnySquare::getArea()的函数签名和继承链上的虚函数完全匹配,因此可以合法使用override标注,编译器会校验通过。

补充说明:C++11引入的override关键字仅承担编译期校验的作用,确认当前函数确实重写了继承链上的某个可访问虚函数,不会修改函数本身的属性。日常开发中建议所有重写虚函数的场景都添加override标识,可以提前捕获签名不匹配、基类函数误删等编译期错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:12:02