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

/*
对象指针和对象引用的应用.
函数传值调用和传地址的调用*/
#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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值