C++中的虚函数必须实现吗?
virtual function in C++ must be implemented?
class A
{
public:
A(){}
virtual void func();
};
class B:public A
{
void func(){}
}
如果func
没有实现,我定义一个A
的对象时会出现连接错误。所以为什么?我还没有打电话给 func
。
if the func isn't implemented, there will be linkage error when I define one object of A. So why?
因为标准规定在这种情况下必须定义函数(强调我的):
[class.virtual]
A virtual function declared in a class shall be defined, or declared pure ([class.abstract]) in that class, or both; no diagnostic is required ([basic.def.odr]).
由于缺少非纯虚函数的定义不符合标准,标准不要求工具链能够成功生成可执行文件。
如果链接器能够诊断出丢失的定义,那么您可以认为自己很幸运,因为标准并未强制要求进行诊断。如果消息含糊不清,好吧,这就是为什么不强制执行诊断的原因。链接器很难找出源代码损坏的原因。
必须实现虚函数,除非是纯虚函数
class A
{
public:
A(){}
virtual void func();
};
class B:public A
{
void func(){}
}
如果func
没有实现,我定义一个A
的对象时会出现连接错误。所以为什么?我还没有打电话给 func
。
if the func isn't implemented, there will be linkage error when I define one object of A. So why?
因为标准规定在这种情况下必须定义函数(强调我的):
[class.virtual]
A virtual function declared in a class shall be defined, or declared pure ([class.abstract]) in that class, or both; no diagnostic is required ([basic.def.odr]).
由于缺少非纯虚函数的定义不符合标准,标准不要求工具链能够成功生成可执行文件。
如果链接器能够诊断出丢失的定义,那么您可以认为自己很幸运,因为标准并未强制要求进行诊断。如果消息含糊不清,好吧,这就是为什么不强制执行诊断的原因。链接器很难找出源代码损坏的原因。
必须实现虚函数,除非是纯虚函数