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