面向对象编程试验课随笔(类与对象、静态变量、对象传输)

这篇博客探讨了C++中对象传递的方式,通过一个实例展示了如何使用传值和引用传递对象。同时,介绍了静态成员的概念,包括静态数据成员和静态函数成员,并通过一个班级财务管理的案例解释了静态成员如何在多个对象间共享数据。最后,实现了一个TStudent类,用于跟踪班级班费,展示了如何初始化静态变量、进行花销计算和显示余额。
摘要由CSDN通过智能技术生成

Part A

试验目的:

了解不同的对象传递方式

代码如下:

#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());
	//ob->set_i(ob->get_i() * ob->get_i());
	cout << "在函数sqr_it内,形参对象ob的数据成员i的值为:" << ob.get_i() << endl;
	//cout << "在函数sqr_it内,形参对象ob的数据成员i的值为:" << ob->get_i() << endl;
}
int main()
{
	Tr obj(10);
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(obj);
	//sqr_it(&obj);
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;

运行结果为:

 Part B

试验目的:

1.掌握静态成员的概念和使用

2.由关键字static修饰说明的成员,称为静态成员

3.静态成员为所有对象共享,只有一份存于公用内存中

4.静态成员包括静态数据成员和静态函数成员

试验代码如下:

#include<iostream>
using namespace std;
class Ctest
{
public:
	static int count;
	Ctest()
	{
		++count;
		cout << "对象数量" << count << "\n" << endl;
	}
	~Ctest() {};
	void send()
	{
		n = count;
	}
	void show()
	{
		cout << n << endl;
	}
private:
	int n;
};
int Ctest::count = 0;
int main()
{
	Ctest a[3];
	a->send();
	a->show();
	return 0;
}

我稍稍修改了一下示范代码,让计数变量在计数结束后输出出来

Part C

试验目的:

创建一个TStudent类,实现以下功能:

1.该类包含三个函数:InitStudent、ExpendMoney和ShowMoney

2.采用float m_ClassMoney变量作为静态变量,用于储存班级的班费,初始值设置为1000

3.InitStudent用于完成学生姓名的初始化

4.ExpendMoney用于完成班级的花销计算

5.ShowMoney用于展示班费余额

6.主程序中分别定义A、B、C三个学生,每个学生为一个对象,每个学生的花销分别为50、98.5、500.53,最后显示班费的余额

试验过程

我做这项试验的思路是,首先A、B、C三个学生是在主程序中定义的,所以name[]这个数组需要在主程序中调用,所以我才用了静态变量来定义name[]数组,然后再按照类的构建思路来写代码,如下:

#include<iostream>
using namespace std;
class TStudent
{
public:
	static float m_ClassMoney;
	static string name[3];
};
float TStudent::m_ClassMoney = 1000;
string TStudent::name[3] = { "0","0","0" };
int main()
{
	TStudent::name[0] = "A";
	TStudent::name[1] = "B";
	TStudent::name[2] = "C";
}

之后再看要求,需要将name[]数组初始化,这边使用的是静态变量,所以直接在类外声明了,不需要再写一个声明函数

还有一个需要进行花销计算的函数ExpendMoney我在这边采用的是三个if来进行判定,需要扣除多少钱

void ExpendMoney()
	{
		float money=0;
		if (name[i] == "A")
		{
			money = 50;
		}
		else if (name[i] == "B")
		{
			money = 98.5;
		}
		else if(name[i]=="C") 
		{
			money = 500.53;
		}
		m_ClassMoney = m_ClassMoney - money;
	}

这样我们就需要一个计数变量来确定到底学生是A还是B或者C

所以我添加了一个静态计数变量i来记录构造函数的运行次数,从而判断学生是哪一位,最后在主函数中设置对象,整个程序就完成了

#include<iostream>
using namespace std;
class TStudent
{
public:
	static float m_ClassMoney;
	static string name[3];
	static int i;
	TStudent()
	{
		++i;
	}
	~TStudent() {};
	void ExpendMoney()
	{
		float money=0;
		if (name[i] == "A")
		{
			money = 50;
		}
		else if (name[i] == "B")
		{
			money = 98.5;
		}
		else if(name[i]=="C") 
		{
			money = 500.53;
		}
		m_ClassMoney = m_ClassMoney - money;
	}
	void ShowMoney()
	{
		cout << "班费余额还剩余" << m_ClassMoney << endl;
	}
};
float TStudent::m_ClassMoney = 1000;
int TStudent::i = -1;
string TStudent::name[3] = { "0","0","0" };
int main()
{
	TStudent::name[0] = "A";
	TStudent::name[1] = "B";
	TStudent::name[2] = "C";
	TStudent x;
	x.ExpendMoney();
	x.ShowMoney();
	TStudent y;
	y.ExpendMoney();
	y.ShowMoney();
	TStudent z;
	z.ExpendMoney();
	z.ShowMoney();
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值