【发布时间】:2016-02-05 05:33:24
【问题描述】:
我有三个班级:B、D 和 G。 D 是 B,G 是 D。 B 和 D 都是抽象的。 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 允许,但我没有术语/词汇来验证该行为是标准的一部分还是未定义并且恰好在今天起作用。
【问题讨论】:
标签: c++ c++11 virtual language-lawyer pure-virtual