必须在C ++中实现虚函数?

时间:2018-09-17 01:05:15

标签: c++ virtual

class A
{
public:
    A(){}
    virtual void func();
};
class B:public A
{
    void func(){}
}

如果未实现func,则在定义A的一个对象时会出现链接错误。所以为什么?我还没有打func

2 个答案:

答案 0 :(得分:6)

  

如果未实现func,则在定义A的一个对象时会出现链接错误。为什么?

因为该标准说必须在这种情况下定义功能(强调我的意思):

  

[class.virtual]

     

在类中声明的虚函数必须被定义,或在该类中声明为纯函数[[class.abstract]),或两者都定义;无需诊断([basic.def.odr])。

由于对非纯虚函数的定义不符合标准,因此该标准不需要工具链成功生成可执行文件。

如果链接程序能够诊断缺少的定义,那么您可以认为自己很幸运,因为该诊断不是标准的强制要求。如果消息含糊不清,那么,没有强制执行诊断的原因是有原因的。对于链接器来说,找出源中断的原因并不容易。

答案 1 :(得分:1)

必须实现虚拟功能,除非它是纯虚拟功能。