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()
和A::fun2()
,因此也不会查找它们的定义。
如果你有3行和4行,A::sum()
的定义会在链接时查找。由于A::sum()
使用A::fun1()
和A::fun2()
,他们的定义也被查阅了。
如何执行检查顺序?
只要声明了函数,就可以在语句/表达式中使用它。链接时错误不是定义它们。
如果未使用,则可以声明函数但不定义函数。
函数声明告诉编译器函数的名称,返回类型和参数。函数定义提供函数的实际主体。 C ++函数定义的一般形式如下:
return_type function_name( parameter list ) {
body of the function
}
如果在你的情况下没有定义函数(return_type),它将给你错误。