c++ - 什么时候在类中检查函数的定义?
问题描述
class A
{
public:
int fun1();
int fun2();
void sum()
{
cout<<fun1()+fun2();
}
};
class B: public A
{
int fun1()
{
return 1;
}
int fun2()
{
return 2;
}
};
int main()
{
A x;
B y;
x.sum();// line 3
y.sum();// line 4
return 0;
}
为什么现在有错误??如果缺少第 3 行、第 4 行,为什么没有错误?检查顺序如何执行? 编辑 为什么在调用 x.sum() 时出现错误,编译器不会生成错误
解决方案
为什么现在有错误??
因为你还没有定义它们。
如果缺少第 3 行、第 4 行,为什么没有错误?
如果缺少第 3 行和第 4 行,A::sum()
则不使用。因此,不查找其定义。A::fun1()
并且A::fun2()
仅由 使用A::sum()
。由于没有其他函数使用A::fun1()
and A::fun2()
,因此也不会查找它们的定义。
当您有第 3 行和第 4A::sum()
行时,在链接时查找 的定义。由于A::sum()
使用A::fun1()
和A::fun2()
,因此也会查找它们的定义。
检查顺序如何执行?
只要声明了函数,就可以在语句/表达式中使用它。不定义它们是链接时间错误。
如果不使用函数,则可以声明但未定义。
推荐阅读
- bash - AWK通过2个字段分组获取平均值
- android - 开发Android 9.0 eSIM LPA(系统应用)
- html - 你能链接 ng-class 条件吗?
- php - mysql两表join查询执行耗时(每表4000条记录)
- java - 如何使用具有信息的现有数据库创建登录活动
- java - 用switch case分解复杂方法
- python - Django rest-framework:类似 Spring Boot 的模型序列化
- python - 浮点数列表的 Python 顺序列表
- android - 活动的android弱引用
- ruby-on-rails-4 - Rails 4:ActiveAdmin 在更新时清除数组字段