| 实验目的:进一步加深对类和对象的理解掌握几种对象传递的使用方法掌握静态成员的概念和使用
 学习内容(a):了解三种不同的对象传递方式,分别为: 1.使用对象作为函数参数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_it内,形参ob的数据成员i的值为:" << ob.get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(obj);
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}
 
 2.使用对象指针作为函数参数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_it内,形参ob的数据成员i的值为:" << ob->get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(&obj);
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}
 
 3.使用对象引用作为函数参数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_it内,形参ob的数据成员i的值为:" << ob.get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(obj);
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}
  分析总结:
 1.在向函数传递对象时,是通过“传值调用”传递函数的,只由实参传给形参,而不能由形参传回来给实参,函数中对对象的修改不影响该对象实参的值;
 2.形参对象指针所指对象的值的改变影响着实参对象的值;
 3.使用对象的引用作为形参也能改变对象的实参的值,而且方法比使用指针更加简单;
 实验内容(b)掌握静态成员的概念和使用;由关键字static修饰说明的成员,称为静态成员;静态成员为所有对象共享,只有一份存于公共内存中;静态成员包括静态数据成员和静态函数成员;
 代码:class Ctext {
	static int count;
public:
	Ctext()
	{
		++count;
		cout << "对象数量=" << count << '\n';
	}
};
int Ctext::count = 0;
int main(void)
{
	Ctext a[3];
	return 0;
}
 
 实验内容(c)实验要求:1.创建一个TStudent类,完成以下功能:2.该类包括三个函数: InitStudent、 ExpendMoney和ShowMoney;
 3.采用float m_ ClassMoney变量作为静态变量,用于存储班级的班费, 初始值设为1000;
 4.InitStudent (char name)主要负责完成学生姓名的初始化;
 5.ExpendMoney(float money)主要完成班费的花销计算;
 6.ShowMoney()主要完成班费余额显示;
 7.主程序中分别定义A、B、C三个学生,每个学生为一个对象,每个学生分别消费班费50,98.5,500.53,最后显示班费的余额。
 代码(方法1-直接在主函数赋予函数参数):class TStudent {
private:
	float spent_money;
	
	static float m_ClassMoney;
public:
	TStudent();
	void InitStudent(char name);
	void ExpendMoney(float money);
	void ShowMoney();
};
float TStudent::m_ClassMoney = 1000;
TStudent::TStudent()
{
}
void TStudent::InitStudent(char name)
{
}
void TStudent::ExpendMoney(float money)
{
	m_ClassMoney = m_ClassMoney - money;
}
void TStudent::ShowMoney()
{
	cout << "班费剩余金额为:" << m_ClassMoney << endl;
}
int main()
{
	TStudent a, b, c;
	a.InitStudent('a');
	a.ExpendMoney(50);
	a.ShowMoney();
	b.InitStudent('b');
	b.ExpendMoney(98.5);
	b.ShowMoney();
	c.InitStudent('c');
	c.ExpendMoney(500.53);
	c.ShowMoney();
	return 0;
}
 
 代码(方法2-使用对象引用作为函数参数):class TStudent{
private:
    float spent_money;
	char name[10];
	static float m_ClassMoney;
public:
	TStudent(float money);
	void InitStudent(TStudent& obj);
    void ExpendMoney(TStudent& obj);
    void ShowMoney();
};
float TStudent::m_ClassMoney = 1000;
TStudent::TStudent(float money)
{
	spent_money = money;
}
void TStudent::InitStudent(TStudent& obj)
{
	cout << "请输入该消费者的姓名:";
	cin >> obj.name;
	cout << obj.name << "消费了" << obj.spent_money << endl;
}
void TStudent::ExpendMoney(TStudent& obj)
{
	m_ClassMoney = m_ClassMoney - obj.spent_money;
}
void TStudent::ShowMoney()
{
	cout << "班费剩余金额为:" << m_ClassMoney << endl;
}
int main()
{
	TStudent a(50), b(98.5), c(500.53);
	a.InitStudent(a);
	a.ExpendMoney(a);
	a.ShowMoney();
	b.InitStudent(b);
	b.ExpendMoney(b);
	b.ShowMoney();
	c.InitStudent(c);
	c.ExpendMoney(c);
	c.ShowMoney();
	return 0;
}
 
 出现的问题: 因为m_ClassMoney是静态变量,而spend_money是非静态变量,所以无法进行如此运算。
 后改成上面程序段中的形式,使用对象引用得已解决。
 |