什么时候在类中检查函数的定义?

问题描述 投票:-2回答:2
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()时出错

c++ function inheritance
2个回答
3
投票

为什么现在有错误?

因为你还没有定义它们。

如果缺少第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(),他们的定义也被查阅了。

如何执行检查顺序?

只要声明了函数,就可以在语句/表达式中使用它。链接时错误不是定义它们。

如果未使用,则可以声明函数但不定义函数。


0
投票

函数声明告诉编译器函数的名称,返回类型和参数。函数定义提供函数的实际主体。 C ++函数定义的一般形式如下:

return_type function_name( parameter list ) {
   body of the function
}

如果在你的情况下没有定义函数(return_type),它将给你错误。

© www.soinside.com 2019 - 2024. All rights reserved.