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)將前面已定義的某些成員函數改寫為常成員函數,觀察是否該類別中所有的成員函數是否都可設定為常成員函數。
常資料成員不能更新物件的資料成員,也不能呼叫該類別中的普通成員函數。在常成員函數中絕對不會更新資料成員的值。