【无标题】

比较三类对象传递方式的不同:

1、定义一个对象作为实参:在这种方式里面实参与形参是相互隔离的,即改变形参里的内容是并不会改变实参里的数值,形参只在函数内部存在,函数结束时存储形参的存储空间被释放掉,因此在调用函数后实参里的值是不变的。 

2、使用指针作为形参:在这种方式中,相当于把实参的地址传递给了函数中 ,我们函数是对指针所对应的内容进行修改,相当于直接修改实参,因此在这种方式下,我们调用函数后,实参的内容会改变。

 3、引用作为形参:代码如下

#include<iostream>
using namespace std;
class Tr
{
public:
	Tr(int n)
	{
		i = n;
	}
	void set_i(int n)
	{
		i = n;
	}
	int get_i()
	{
		return i;
	}
private:
	int i;
};

void sqr_it(Tr& ob)
{
	ob.set_i(ob.get_i() * ob.get_i());
	cout << "在函数SQR内部,数据成员的值:" << ob.get_i() << endl;
}

void main()
{
	Tr obj(10);
	cout << "调用函数SQR前,实参对象内数据成员的值:" << obj.get_i() << endl;
	sqr_it(obj);
	cout << "调用之后,实参对象OBJ数据对象的值:" << obj.get_i() << endl;
}

在程序中,我们以ob作为函数sqr_it()的形参,ob相当于实参obj的别名,两者所代表的对象在存储器中占用的空间地址是同一个,ob相当于obj的别名,因此以引用作为形参在函数内部调用时就相当于直接对形参操作,因此在调用完函数之后,形参内容也随之变化。

 关于静态成员需要注意的问题:

1、类内静态成员在定义时使用关键字static定义,但不可以给他初始量,初始化要在类外进行。

举例:

#include<iostream>
using namespace std;
class Student
{
	static float m_ClassMoney;
public:
	void InitStudent(char nametemp[])
	{
		for (int count = 0; count < 10; count++)
		{
			name[count] = nametemp[count];
		}
	}
	void ExpendMoney(float moneytemp)
	{
		money = moneytemp;
		m_ClassMoney -= money;
	}
	void ShowMoney()
	{
		cout << "班费还剩余:" << m_ClassMoney << endl;
	}
private:
	char name[10];
	float money;
};
float Student::m_ClassMoney = 1000;
void main()
{	
	char one[10] = { 'A' };
	char two[10] = { 'B' };
	char three[10] = { 'C' };
	Student A;
	Student B;
	Student C;
	A.InitStudent(one);
	A.ExpendMoney(50);
	A.ShowMoney();
	B.InitStudent(two);
	B.ExpendMoney(98.5);
	B.ShowMoney();
	C.InitStudent(three);
	C.ExpendMoney(500.53);
	C.ShowMoney();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值