请问为什么在main函数里,为什么b.g(a)里不能写成b.g(i)?
#include <iostream>
using namespace std;
class X;
class Y {
public:
void g(X& p);
};
class Z {
public:
void f(X& p);
};
class X {
private:
int i;
public:
X(int i_)
{
i = i_;
cout << "i的原值为:" << endl;
}
friend class Z;
friend void Y::g(X& p);
friend void h(X& p);
void show();
};
void Y::g(X& p) {
p.i++;
}
void h(X& p) {
p.i += 10;
}
void Z::f(X& p) {
p.i += 5;
}
void X::show() {
cout << i << endl;
}
int main() {
int i;
cout << "请输入i的值:" << endl;
cin >> i;
X a(i);
a.show();
Y b;
b.g(a);
a.show();
Z z;
z.f(a);
a.show();
h;
h(a);
a.show();
return 0;
}
X$p是定义了一个X型的引用,假名是p,类型对应的话应该是a,而不是a里面的i。
可以写,改写为b.g(i) ,但是需要改写b.g的参数,他的参数是 X& ,而直接给他一个整数,他会把用这个整数初始化一个临时的X类型变量,而临时的变量是不能引用的,只能把它改成const X& ,才可以这样但是又有一个问题就是一个const & ,他是只读的