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

hon*_*iao 1 c++ virtual

class A
{
public:
    A(){}
    virtual void func();
};
class B:public A
{
    void func(){}
}
Run Code Online (Sandbox Code Playgroud)

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

eer*_*ika 6

如果没有实现func,当我定义A的一个对象时会出现链接错误.那么为什么呢?

因为标准说在这种情况下必须定义函数(强调我的):

[class.virtual]

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

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

如果链接器能够诊断缺失的定义,那么您可以认为自己很幸运,因为标准没有强制要求诊断.如果消息含糊不清,那么就有理由不对诊断进行诊断.链接器不容易找出源被破坏的原因.