【項目 - 存儲班長資訊的學生類】
(1)上面是聲明好的類及測試函數,請完成類中成員函數的定義,使運作結果如圖所示。
(2)将stu類的資料成員的通路權限改為private,你的程式是否能完成要求的功能?如果不行,請修改程式。請不要修改給出的代碼,隻能修改自己寫的代碼。
[參考解答]
(1)
(2)當stu類的資料成員通路權限改為private後,39和40行通路基類的私有資料成員,出錯是必然的。
||=== example, debug ===|
f:\c++\codeblock\example\main.cpp||in member function 'void studetail::show()':|
f:\c++\codeblock\example\main.cpp|10|error: 'int stu::num' is private|
f:\c++\codeblock\example\main.cpp|39|error: within this context|
f:\c++\codeblock\example\main.cpp|11|error: 'std::string stu::name' is private|
f:\c++\codeblock\example\main.cpp|40|error: within this context|
||=== build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|
改法1:
再改回去!基類中的資料成員用protected的做法是一般的做法。
既然現在“搗亂”,也不這樣做了。
改法2:
在基類stu中,增加兩個公用的get函數,在子類中通路時,輸出get函數的結果。注意9、10行加的函數,以及41、42行改過的輸出。
改法3:
注意到基類stu中已經提供了顯示的display函數,是公共的,派生類中當然可以直接通路了。于是,在studetail::show函數中調用就行了。注意下面程式的第39行: