提问人:Yksisarvinen 提问时间:3/5/2020 最后编辑:Yksisarvinen 更新时间:3/5/2022 访问量:626
使用纯说明符覆盖虚函数是否有效?[复制]
Is it valid to override virtual function with pure specifier? [duplicate]
问:
注意:我不问这是否是合理的做法,或者这是否是好的设计。我只是问这是否是定义明确的行为,以及结果是否符合预期。
我遇到了以下阶级等级:
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
}
此代码定义是否正确?我们是否可以用纯说明符覆盖定义?
答:
18赞
Daniel Langr
3/5/2020
#1
[class.abstract/5] 的当前标准草案:
[注意:抽象类可以从非抽象类派生而来,纯虚函数可以覆盖非纯虚函数。— 结束语]
即使在 C++11 标准中也包含相同的注释。所以,答案是肯定的,它是有效的。
评论
C