用纯说明符重写虚拟函数有效吗



注意:我不知道这样做是否合理,也不知道这是否是一个好的设计。我只是想问,这是否是定义明确的行为,结果是否如预期

我发现了以下阶级层次结构:

struct A
{
virtual void foo() = 0;
};
struct B: public A
{
void foo() override 
{
std::cout << "B::foo()n";
}
};
struct C: public B
{
virtual void foo() = 0;
};
struct D: public C
{
void foo() override
{
std::cout << "D::foo()n";
}
};
int main()
{
A* d = new D;
d->foo(); //outputs "D::foo()"
// A* c = new C; // doesn't compile as expected
}

这个代码定义得好吗?我们可以用纯说明符重写定义吗?

当前标准草案的

[class.abstract/5]:

注意:抽象类可以从非抽象类派生,而纯虚拟函数可以覆盖非纯虚拟函数。--结束注释]

即使在C++11标准中也包含了相同的注释。因此,答案是是的,它是有效的。

最新更新