c++ - 我可以用纯虚拟函数覆盖虚拟函数吗?

标签 c++ c++11 virtual language-lawyer pure-virtual

我有三个类:BDGDBGDBD 都是抽象的。 B 来自第三方。

B 有一个非纯虚方法,G 需要实现(成为 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
}

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

最佳答案

你问:

Can I override a virtual function with a pure virtual one?

答案是:是的,你可以。来自 C++11 标准:

10.4 Abstract classes

5 [ Note: An abstract class can be derived from a class that is not abstract, and a pure virtual function may override a virtual function which is not pure. —end note ]

关于c++ - 我可以用纯虚拟函数覆盖虚拟函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526666/

相关文章:

c++ - 使用 makefile 编译 C++ 项目的问题

c++ - c++11 兼容的编译器是否总是忽略内联提示?

c++ - 构造函数不能是虚拟的,为什么?不是骗子

c++ - 使用 openssl 在 C++ 中验证 RSA 签名

c++ - 替换 getchar 的返回值

c++ - 我的重载运算符 < 不适用于 cpp 中的排序函数

c++ - 尽管传递了一个右值,为什么我的 move 构造函数没有被调用?

c++ - 在 C++11 中打印编译时整数序列

c++ - 在基类中是 const 而在派生类中不是 const 的虚函数

c++ - 强制虚拟方法表中的函数顺序?