ato*_*erz 14 c++ polymorphism overriding abstract pure-virtual
假设我有以下代码:
class Iinterface
{
virtual void abstractFunction()=0;
};
class Derived : public Iinterface
{
void abstractFunction(); // Do I need this line?
};
Derived::abstractFunction()
{
// implementation here
}
Run Code Online (Sandbox Code Playgroud)
如果我没有添加有问题的行,我会收到编译错误,说明abstractFunction未声明Derived.我正在使用VS 2008.
我不确定为什么我需要这个特定的行(不要把它与类声明之外提供的函数定义混淆),只要我继承Iinterface它就应该很明显我abstractFunction声明了.这是Visual Studio的问题还是由c ++标准强制执行?
如果在所有派生类中隐含了纯虚函数基函数的声明,那么就永远不会有一个相对于纯虚基函数而言仍然是抽象的派生类.相反,所有派生类都会产生链接器错误.这将是非常反直觉和令人困惑的,它会使语言不那么富有表现力.
而且,它甚至没有意义:派生类是否抽象的问题必须在编译时随处都知道.覆盖的实现通常仅在一个单独的翻译单元中提供,因此不可能传达这样的事实,即您实际上意味着该函数被覆盖到程序的其余部分.