哪个C++高手帮我解决这个问题?

来源:百度知道 编辑:UC知道 时间:2024/05/22 02:00:00
C++书上有个友元的程序代码,有些看不懂:

class A
{
public
void fri_a(B vobj)
{ vobj.x*=2;
vobj.y*=2;
cout<<"x="<<x<<endl<<"y="<<y<<endl;
}
void fri_b(B vobj)
{ vobj.x*=3;
vobj.y*=3;
cout<<"x="<<x<<endl<<"y="<<y<<endl;
}

};

class B
{ int x,y;
friend class A;
public:
B(int vx, int vy)
{
x=vx;y=vy;
}
void put()
{cout<<"x="<<x<<endl<<"y="<<endl;}
};

void main()
{ B obj1(9,20);
obj1.put();
A obj2;
obj2.fri_a(obj1);//用的是不是类B的对象obj1 里面的成员X,Y?
obj2.fri_b(obj1);
}
我认为最后的结果是:
9
20
18
40
36
80
因为obj2.fri_a(obj1);
obj2.fri_b(obj1);
都是用的obj1的X,Y成员每次的改变对下一次都有影响,可是书上给的答案是:
9
20

因为obj2.fri_a(obj1);
obj2.fri_b(obj1);
都是用的obj1的X,Y成员每次的改变对下一次都有影响,
你这样理解是错误的。注意A::fri_a、A::fri_b函数的形参,是传值的,不是传地址或引用的,所以这两个函数修改的是对象obj1,obj2的复制品,即他们修改的仅仅是当这两个函数要被调用时专门为他们分配的在栈中的两个复制品,而主函数中定义的obj1,obj2并没有被修改。