为什么我们可以在没有对象的情况下调用showA()方法?但是,如果在方法定义中使用void A :: showA(A&x),则必须使用A的对象来调用它,为什么?

#include <iostream>

class A {

public:
    int a;
    A() { a = 0; }


     void showA(A&);
};

void showA(A& x)
{

    std::cout << "A::a=" << x.a;
}

int main()
{
    A a;
    showA(a);
    return 0;
}

最佳答案

为什么我们可以在没有对象的情况下调用showA()方法?


您不调用成员函数A::showA,而是调用自由函数showA。实际上,成员函数A::showA(A&)是声明的,但从未定义,只有自由函数showA(A&)具有定义。

如果要调用A::showA,则需要一个定义。

void A::showA(A& x) { /* ... */ }
//   ^^^ this makes it a member function definition


然后称为

A a;

a.showA(a);


(请注意,将a实例传递给在同一A::showA实例上调用的a并没有多大意义,但这是另一个问题)。

关于c++ - 为什么不能使用A的对象调用showA()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58604713/

10-11 21:22