c++ - 为什么我不能使用 A 的对象调用 showA()?
问题描述
为什么我们可以在没有对象的情况下调用 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
,但这是另一个问题)。
推荐阅读
- google-cloud-platform - Google cloud storage, public objects but not public project
- grammar - CFG for constituent tree of As Bs and as and bs
- javascript - How to pass a valid CSRF token to AdonisJs using jQuery?
- entity-framework-core - EF Core TPH Migration - Derived types have no key defined
- css - 为什么边框半径会影响盒子阴影?
- excel - MS Excel custom formatting left to right
- salesforce - While importing product XML in demandware how to append images in same product?
- javascript - 如何使用按钮添加和删除行?
- video - 在ffmpeg中设置cpu线程
- selenium - 在 Selenium 中使用页面对象模型将辅助类放在哪里?