我可以使用纯虚拟功能覆盖虚拟功能吗?

jto*_*ker 25 c++ virtual pure-virtual language-lawyer c++11

我有三个类:B,DG. D是一个B,G是一个D.这两个BD是抽象的. B来自第三方.

B有一个非纯的虚方法G需要实现(成为a D).将虚拟函数重新定义/覆盖为纯虚拟,我可以并且是一种好习惯吗?

例:

class B // from a third party
{
public:
   virtual void foo();
};

class D : public B
{
public:
   void foo() override = 0; // allowed by gcc 4.8.2
   virtual void bar() = 0;
};

class G : public D
{
public:
   // forgot to reimplement foo
   void bar() override;
};

int main()
{
   G test;  // compiler error is desired
}
Run Code Online (Sandbox Code Playgroud)

对于"我可以吗?"的问题 gcc允许它,但是我没有术语/词汇表来验证行为是标准的一部分还是未定义并且恰好在今天工作.

R S*_*ahu 23

您询问:

我可以使用纯虚拟功能覆盖虚拟功能吗?

答案是:是的,你可以.从C++ 11标准:

10.4抽象类

5 [ 注意:抽象类可以从非抽象的类派生,纯虚函数可以覆盖不纯的虚函数.- 结束说明 ]

  • 那么,这不是规范性的,而是很好的发现! (4认同)