1、 实验目的
(1)学习静态成员的使用
(2)学习常成员的使用
(3)掌握静态数据成员与常数据成员的初始化
2、实验内容
(1)某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记录下目前库存的货物的总重量,现在要求设计一个Goods类并使用静态成员来模拟商店货物购进和卖出的情况;
(2)为上面的Goods类添加一个常数据成员(货物名称),并对货物名称进行初始化;
(3)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
3、实验步骤
(1)添加一个头文件Goods.h来定义Goods类
#include<iostream>
using namespace std;
class Goods
{
public:
Goods(int inBox, double inWeight);
~Goods();
void Sell(int outBox, double outWeight);
void print();
private:
int Box;
double weight;
static int totalBox;
static double totalWeight;
};
Goods::Goods(int inBox, double inWeight)
{
Box = inBox;
totalWeight = inWeight;
totalBox = totalBox + inBox;
totalWeight = totalWeight = inWeight;
}
void Goods::Sell(int outBox, double outWeight) {
totalBox = totalBox - outBox;
totalWeight = totalWeight - outWeight;
}
void Goods::print() {
cout << "当前货物总箱数为:" << totalBox << "箱" << endl;
cout << "当前货物总重量为:" << totalWeight << "kg" << endl;
}
Goods::~Goods()
{
}
int Goods::totalBox = 0;
double Goods::totalWeight = 0.0;
(2)添加一个源文件Goods.cpp来实现成员函数。
(3)在主程序中定义若干个Goods类的对象,模拟进货与卖出的过程。查看运行结果。
#include"Goods.h"
int main()
{
Goods gd(5, 200);
gd.Sell(2, 50);
gd.print();
getchar();
return 0;
}
(4)为Goods类添加一个常数据成员const char * name来表示货物名称,改写构造函数及主程序的调用,在构造函数的成员初始化列表中对货物名称赋初值。重新编译,观察运行结果。
(5)将前面已定义的某些成员函数改写为常成员函数,观察是否该类中所有的成员函数是否都可设定为常成员函数。
常数据成员不能更新对象的数据成员,也不能调用该类中的普通成员函数。在常成员函数中绝对不会更新数据成员的值。