被重写的纯虚函数是否默认带virtual属性?C++ override使用疑问
C++虚函数继承规则答疑
你的猜想是正确的,该现象完全符合C++标准的规定,核心逻辑如下:
- 只要成员函数在继承链的上层基类中被显式声明为
virtual,那么所有派生类中重写该函数的对应成员函数,无论是否显式标注virtual关键字,都默认具备虚属性,该属性会沿着继承链永久传递。
对应你给出的代码场景:
- 顶层基类
Shape的getArea()已经被显式声明为纯虚函数(带virtual关键字和= 0标识),该函数的虚属性会向下传递给所有派生类。 Square类中的getArea()通过override关键字完成了对Shape类虚函数的重写,此时即使没有手动加virtual,Square::getArea()本身依然是虚函数。FunnySquare继承自Square,FunnySquare::getArea()的函数签名和继承链上的虚函数完全匹配,因此可以合法使用override标注,编译器会校验通过。
补充说明:C++11引入的
override关键字仅承担编译期校验的作用,确认当前函数确实重写了继承链上的某个可访问虚函数,不会修改函数本身的属性。日常开发中建议所有重写虚函数的场景都添加override标识,可以提前捕获签名不匹配、基类函数误删等编译期错误。
内容的提问来源于stack exchange,提问作者Max Dolensky
相关产品推荐
相关产品推荐

