使被覆盖的虚函数变为非虚函数的目的
Purpose of making overridden virtual function non-virtual
考虑c++ 11中的下列类:
class Base
{
public:
virtual void foo() = 0;
}
class Sub1 : public Base
{
public:
virtual void foo() override {};
}
class Sub2 : public Base
{
public:
void foo() override {};
}
使重写的函数像Sub2
那样非虚的结果是什么?
虚函数的重写始终是虚函数,无论它是否声明为虚函数。因此,就语言而言,在Sub2::foo()
的声明中有或没有virtual
关键字没有任何影响,因为override
关键字意味着函数必须覆盖基类的成员函数。源自§10.3[类]虚拟]/p2的标准,重点添加:
如果虚成员函数
vf
声明在类Base
和类Derived
,直接或间接派生自Base
具有相同名称的成员函数vf
,参数类型列表(8.3.5),cv- qualifier和ref-qualifier(或缺少相同的),如Base::vf
,那么Derived::vf
也是虚的(),不管它是否)并且覆盖Base::vf
。为了方便,我们说任何虚函数都可以覆盖自己。
省略单词virtual
并不表示该函数是非虚拟的。它确实减少了冗长,减少了视觉噪音,或者简而言之,减少了源代码文本给人的印象,因为它太冗长了,没有任何特定的部分引入任何真正新的东西来吸引读者的注意力,所以它看起来或多或少像一堆灰色的文本,这当然会导致一些重要的细节被忽视,也就是说,无意中被忽视了。优先使用override
关键字
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()