C++程序,请能人帮忙分析啊!

来源:百度知道 编辑:UC知道 时间:2024/05/20 02:48:42
#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(const A &a);
void Print()
{cout<<x<<','<<y<<endl;}
private:
int x,y;
};
void A::Copy(const A &a)
{
x=a.x;y=a.y;
}
void fun(A a1,A &ra)
{
a1.Setxy(10,15);
ra.Setxy(20,25);
}
void main()
{
A a(5,8),b;
b.Copy(a);
fun(a,b);
a.Print();
b.Print();
}
输出结果是
5,8
20,25

#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(const A &a);
void Print()
{
cout<<x<<','<<y<<endl;
}
private:
int x,y;
};
void A::Copy(const A &a)
{
x=a.x;y=a.y;
}
void fun(A a1,A &ra)
{
a1.Setxy(10,15); //这里改变了形参的值,但不会改变实参的值
ra.Setxy(20,25); //这里改变了形参的值,同时改变了实参的值,因为使用的是引用,和指针一样
}
void main()
{
A a(5,8),b;
b.Copy(a);
fun(a,b); //由于这里调用的是a的值,B的引用,所以返回后,A的值不变,而B的却变了
a.Print();
b.Print();
}

在方法void fun(A a1,A &ra)里,前一参数a1是传值,后一个参数是传引用,符号&表示传引用,传引用会改变传近来的变量的值,但是传值不会.
实例a的x,y一直是5,8.实例b的x,y原来是5,8但经过方法fun(a,b)之后,x就变为20,y就变为25.
传引用跟c里面的指针差不多.