纯虚拟和覆盖功能(c ++)

Sil*_*ane 6 c++ virtual inheritance overriding

我查看了互联网上的问题,但找不到任何答案,所以我在这里.

指定从纯虚拟派生的函数的覆盖是否正确:

class baseClass
{
    public:
        virtual void myFunction() = 0;
}

class derivedClass : public baseClass
{
    public:
        virtual void myFunction() override;
}
Run Code Online (Sandbox Code Playgroud)

它是否正确?

我的第二个问题是:我是否必须在derivedClass中为我的函数指定virtual,即使没有类将从我的派生类继承(它将是最终的)?

非常感谢您的回答!

Sam*_*uca 4

它是否正确?

是的。Override 确保该函数是虚函数并重写基类中的虚函数。如果不是这样,则程序格式错误(生成编译时错误)。

即使没有类会从我的派生类继承(它将是最终的),我是否必须在派生类中为我的函数指定 virtual?

不,你不知道。但即使您忽略虚拟说明符,它仍然是虚拟的。因为它已在您的BaseClass.

如果某个成员函数 vf 在类 Base 中被声明为 virtual,并且某个直接或间接从 Base 派生的类 Derived 具有具有相同成员函数的声明

  • 姓名
  • 参数类型列表(但不是返回类型)
  • 简历限定符
  • 引用限定符

那么Derived类中的这个函数也是virtual的(无论其声明中是否使用了virtual关键字)并且重写了Base::vf(无论其声明中是否使用了override一词)。Base::vf 不需要可见(可以声明为私有,或使用私有继承来继承)即可被覆盖。