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