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