帮分析一下C++的结果

来源:百度知道 编辑:UC知道 时间:2024/06/22 02:31:50
帮看看结果是什么,为什么会有这样的结果,怎么相互附值的?
#include<iostream.h>
class M
{
public:
M(int i,int j)
{
x=i;
y=j;
}
M()
{
x=y=0;
}
void Setxy(int i,int j)
{
x=i;
y=j;
}
void Copy(M *m);
void Print()
{
cout<<x<<","<<y<<endl;
}
private:
int x,y;
};
void M::Copy(M *m)
{
x=m->x;
y=m->y;
}
void fun(M m1,M *m2);
void main()
{
M p(8,10),q;
q.Copy(&p);
fun(p,&q);
p.Print();
q.Print();
}
void fun(M m1,M *m2)
{
m1.Setxy(20,45);
m2->Setxy(30,40);
}
结果我知道,但是不知道为什么!分析一下!别光给我结果!

程序定义了一个叫M的类;类中有void Setxy(int i,int j) ;void Copy(M *m);void Print() ;三个成员函数。
M(int i,int j)和M()是类M的构造函数。
分析M的成员函数:
void Setxy(int i,int j)
{
x=i; //赋值
y=j;
}

void Print()
{
cout<<x<<","<<y<<endl; //输出到屏幕上
}

void M::Copy(M *m)
{
x=m->x;
y=m->y; //还是赋值
}

下面分析主程序main():
void main()
{
M p(8,10),q; //定义两个类M的对象p(8,10),q;分别调用M(int i,int j)和M()构造函数构造。
q.Copy(&p); //调用void Copy(M *m)函数为q.x,q.y赋值
fun(p,&q); //调用fun(p,&q)函数
p.Print(); //调用void Print()函数
q.Print();
}
分析void fun(M m1,M *m2)函数:
void fun(M m1,M *m2)
{
m1.Setxy(20,45); //调用void Setxy(int i,int j)为m1的成员变量赋值
m2->Setxy(30,40);
}
整个程序运行过程如下:
main()->M(int i,int j)->返回原处->M()->返回原处->void Copy(M *m)->返回原处->void fun(M m1,M *m2) ->-void Setxy(int i,int j)>返回原处->void Set