jto*_*ker 25 c++ virtual pure-virtual language-lawyer c++11
我有三个类:B,D和G. D是一个B,G是一个D.这两个B和D是抽象的. 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 [ 注意:抽象类可以从非抽象的类派生,纯虚函数可以覆盖不纯的虚函数.- 结束说明 ]