首页 > 解决方案 > 什么时候在类中检查函数的定义?

问题描述

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++functioninheritance

解决方案


为什么现在有错误??

因为你还没有定义它们。

如果缺少第 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(),因此也会查找它们的定义。

检查顺序如何执行?

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

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


推荐阅读