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

时间:2014-04-09 09:16:23

标签: c++ inheritance override virtual

我浏览了互联网以获得我的问题的答案,但无法找到,所以我在这里。

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

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

class derivedClass : public baseClass
{
    public:
        virtual void myFunction() override;
}

这是对的吗?

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

非常感谢您的回答!

2 个答案:

答案 0 :(得分:4)

  

这是对的吗?

Yes.覆盖确保该函数是虚拟的并覆盖基类中的虚函数。如果不是这样,程序就会形成错误(产生编译时错误)。

  

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

不,你没有。但即使你放弃虚拟说明符,它仍然是虚拟的。因为它已在BaseClass中声明为虚拟。

  

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

     
      
  • 姓名
  •   
  • 参数类型列表(但不是返回类型)
  •   
  • cv修饰符
  •   
  • REF-限定符
  •   
     

然后Derived类中的这个函数也是虚函数(无论是否为   不是关键字virtual在其声明中使用)和覆盖   Base :: vf(无论是否使用单词覆盖)   宣言)。 Base :: vf不需要是可见的(可以声明   私有的,或使用私有继承继承的)被覆盖。

答案 1 :(得分:1)

另外,请记住,您应该在baseClass中定义一个虚拟析构函数(可以是空的析构函数),以保证派生类中的正确资源释放。