C++程序问题,谁能帮我分析一下啊

来源:百度知道 编辑:UC知道 时间:2024/06/24 19:10:07
#include<iostream.h>
class A
{
public:
A(int i,int j)
{x=i,y=j;}
A()
{x=y=0;}
void Setxy(int i,int j)
{x=i;y=j;}
void Copy(A*a);
void Print()
{cout<<x<<','<<y<<endl;}
private:
int x,y;
};
void A::Copy(A*a)
{
x=a->x;y=a->y;
}
void fun(A a1,A*pa)
{
a1.Setxy(10,15);
pa->Setxy(20,25);
}
void main()
{
A a(5,8),b;
b.Copy(&a);
fun(a,&b);
a.Print();
b.Print();
}
输出结果是
5,8
20,25
帮我分析一下过程啊,谢谢啊

那几个构造和赋值函数很简单,我相信你能明白。至于为什么a.Print()输出的是5,8而b.Print()输出的是20,25,这就是参数的两种传递方式:传值函数和传值函数的区别了。
传值函数并不能改变实参的值,因为传值函数的形参是实参的复制体,在函数里面对形参进行了改变,但是并不能改变实参。所以a.Print()输出的是5,8
而传值函数则是通过对实参的引用,也可以说是对实参的地址中的数据进行操作,故能改变实参,所以b.Print()输出的是20,25

这。。。
没什么好解释的。。。

A a(5,8),b;//对象a初始化x=5 y=8 ,对象b初始化x=0 y=0
b.Copy(&a);//调用Copy函数,传递的是对象a的地址,x=a->x = 5,y=a->y=8
fun(a,&b);//调用fun函数,因为参数是不能回传值所以调用后对象a的x=5 y=8 对象b的x=20 y=25
a.Print();//调用对象a的print()5 8
b.Print(); //调用对象b的print()20 25