c++ - 必须实现 C++ 中的虚函数?
问题描述
class A
{
public:
A(){}
virtual void func();
};
class B:public A
{
void func(){}
}
如果func
没有实现,当我定义一个对象时会出现链接错误A
。所以为什么?我没有打电话func
。
解决方案
如果func没有实现,我定义A的一个对象时会出现链接错误。那为什么呢?
因为标准说在这种情况下必须定义函数(强调我的):
[类.虚拟]
在类中声明的虚函数应在该类中定义或声明为纯([class.abstract]),或两者兼而有之;不需要诊断([basic.def.odr])。
由于缺乏对非纯虚函数的定义不符合标准,因此该标准不要求工具链能够成功生成可执行文件。
如果链接器能够诊断出缺少的定义,那么您可以认为自己很幸运,因为标准没有强制要求进行诊断。如果信息含糊不清,那么没有强制要求进行诊断是有原因的。链接器很难找出源代码损坏的原因。
推荐阅读
- python - Primitive、Control 和 Complex Control 小部件有什么区别?
- python - 如何使用 asyncio 拆分流数据及其工作
- entity-framework - EF Core 3.1 是否支持在代码优先的 DbContext 中使用 SQL 视图?
- css - Vuetify 默认轮播 CSS 选择器,用于减少过渡持续时间
- pandas - pandas 按月数滞后多索引不规则时间序列数据
- c++ - C++ ifstream eof() 函数的困惑
- javascript - OClif 模拟方法
- python - Node js vs Django vs Flask,用于从python流式传输的多个视频
- python - 在 Python 中将循环图导出为 pdf
- sql-server - XML Column - 在 xmlColumn.value() 中使用“with namespace”