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;
}