为什么我不能使用 A 的对象调用 showA()?

Why can't I call showA() using A's object?

为什么我们可以在没有对象的情况下调用 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; 
}

Why are we able to call the showA() method without object?

您不调用成员函数 A::showA,而是调用 free 函数 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 实例上调用的 A::showA 没有多大意义,但这是另一个问题)。

这个函数

void showA(A& x) 
{ 

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

不是 class A 的成员函数。

它接受一个类型为 A & 的参数。

至于成员函数showA则为声明但未定义

您可以在 class 中声明它,例如

class A { 

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


     void showA() const; 
};

然后在 class 定义之外定义它,如

void A::showA() const
{ 

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

在这种情况下,函数 main 看起来像

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

您不能调用它,因为 showA(您正在考虑的那个)不是 class.It 的一部分,它是您在 class 中声明的全局 function.The showA 函数从未被定义。为此,请稍微修改您的代码。 更改这段代码。

void A::showA(const A& x) { 
std::cout << "A::a=" << x.a; }  // It is advised to make const as it doesn't change state.