面向对象的程序设计学习笔记-15-函数的传值和传地址

来源:互联网 发布:淘宝闺蜜投诉入口在哪 编辑:程序博客网 时间:2024/05/17 23:42
/*
对象指针和对象引用的应用.
函数传值调用和传地址的调用*/
#include<iostream>
using namespace std;
class m
{
int x,y;
public:
m(){x=0,y=0;};
m(int i,int j){x=i,y=j;};
void copy(m *pm);//使用指针
void copy(m &pm);//使用引用
void setxy(int i,int j);
void print(){cout<<"x:"<<x<<",y="<<y<<endl;}
};
void m::copy(m *pm)
{
x=pm->x;y=pm->y;//实现成员函数的复制
}
void m::copy(m &pm)
{
x=pm.x;y=pm.y;
}
void m::setxy(int i,int j)
{
x=i;y=j;
}
void fun(m *m1,m & m2)//形参m1,m2是传地址
{
m1->setxy(1,2);
m2.setxy(3,4);


};
void fun(m m1,m *m2)//形参m1是传值,m2是传地址
{
m1.setxy(5,6);
m2->setxy(7,8);


};
void fun(m m1,m &m2)//形参m1是传值,m2是传地址
{
m1.setxy(9,10);
m2.setxy(11,12);


};
void main()
{
m m1(5,7),m2;
m2.copy(&m1);//传地址,使得m2=m1
m2.print();
m1.setxy(1,1);
m2.copy(m1);//使用引用来调用函数
m2.print();
/*由于没有返回值,且m1传的是值,并不改变实参的数值。
实参m1传递给形参m1,并不会影响实参的数值。*/
m1.setxy(10,50);m2.setxy(20,50);
fun(&m1,m2);//调用void fun(m *m1,m & m2)
m1.print();//结果应该为m1(1,2),m2(3,4)
m2.print();
m1.setxy(10,50);m2.setxy(20,50);
fun(m1,&m2);//void fun(m m1,m *m2)
m1.print();//m1传值,而m2传地址,所以结果是m1为(10,50)m2为(7,8)
m2.print();
m1.setxy(10,50);m2.setxy(20,50);
fun(m1,m2);//调用的是void fun(m m1,m &m2),所以结果应该是m1为(10,50)m2为(11,12)
m1.print();
m2.print();
}
原创粉丝点击