第 1 頁:基本操作題 |
第 2 頁:簡單應(yīng)用題 |
綜合應(yīng)用題
3[簡答題]
使用VC6打開考生文件夾proj3下的工程proj3,其中定義了一個字符串變量類StringVar。類成員的說明在程序注釋中。請在// ******** 333 ******** 和// ******** 666 ******** 之間填寫StringVar成員函數(shù)和友元函數(shù)的實現(xiàn)代碼。在main函數(shù)中給出了一組測試數(shù)據(jù),運行時輸入:
Hello Kitty
此情況下程序的輸出應(yīng)該是:
Hello Kitty
Borg
Borg
注意:只需在// ******** 333 ******** 和// ******** 666 ******** 之間填入所編寫的若干語句,不要改動程序中的其他內(nèi)容。
參考解析:【參考答案】
【考點分析】
本題考查構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義、類的成員函數(shù)、重載流運算符>>和插入運算符<<和預(yù)定義流對象。
【解題思路】
由StringVar.h這個頭文件可知:頭文件中定義了StringVar類,它包含的成員信息如下:
兩個數(shù)據(jù)成員:char * 類型的value,指向字符串的首地址;int類型的max_length,表示字符串的最大長度。兩個構(gòu)造函數(shù):接收int類型的構(gòu)造函數(shù)和接收const char a[]的構(gòu)造函數(shù)。一個復(fù)制構(gòu)造函數(shù):用參數(shù)strobj對象的成員值給當前對象的成員賦值;
析構(gòu)函數(shù):使用delete[]釋放value指向的地址空間;length()成員函數(shù):返回成員value指向的字符串長度;input_line()成員函數(shù):使用輸入流參數(shù)輸入一個字符串,保存到value指向的內(nèi)存空間;getValue()成員函數(shù):常成員函數(shù),返回value的值。
另外類定義體外部還聲明一個重載“<<”運算符函數(shù),將StringVar對象中value指向的字符串輸出,并返回輸出流outs的引用
StringVar.h中,已經(jīng)給出的定義有:析構(gòu)函數(shù)、length()函數(shù)和getValue()函數(shù),所以需要我們完成的函數(shù)定義有:構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、input_line()函數(shù)和重載的“<<”運算符函數(shù)
①StringVar(int size);
題意指出,size為字符串長度(字符個數(shù))初始值,字符串內(nèi)容初始化為空串,所以需要使用size設(shè)置成員max_length,為value申請size個字符的存儲空間,并把value的第一個字符設(shè)置為'\0'表示空串,這樣保證析構(gòu)函數(shù)的delete[]也是正確的。
、赟tringVar(const char a[]);
題意指出,使用參數(shù)數(shù)組a的內(nèi)容初始化對象的成員,即將數(shù)組a中的內(nèi)容,存放到value指向的內(nèi)存空間,由于value是使用new分配的(保證析構(gòu)函數(shù)的delete[]是正確的),所以不能簡單的把數(shù)組a的首地址賦給value,需要將數(shù)組a的內(nèi)容復(fù)制到value指向的內(nèi)存空間中,另外成員max_length,初值最小必須是value指向的內(nèi)存空間長度,即value指向的字符串長度+1(題意中max_length表示字符個數(shù)的最大值,所以需要包含字符串結(jié)束符'\0')(此構(gòu)造函數(shù)的形參必須傳入的是字符串,如果是字符數(shù)組,必須傳入數(shù)組的長度,以防數(shù)組a的最后一個字符不是結(jié)束符'\0',此時strlen()函數(shù)獲取的長度,就不是字符數(shù)組a的字符個數(shù))
、跾tringVar(coast StringVar& strobj);
復(fù)制構(gòu)造函數(shù)需要將形參strobj的成員賦給當前調(diào)用該復(fù)制構(gòu)造函數(shù)的對象成員,在賦值value時,同樣需要為value分配足夠的內(nèi)存空間。
、躨nput_line(istream& ins);
input_line()函數(shù)需要使用形參ins輸入流,輸入一個字符串存放到value中,題意要求可以輸入空格,所以我們不能直接用輸入流ins和輸入運算符,因為輸入運算符會丟棄空白符、空格符和制表符,可以使用輸入流ins的成員函數(shù):get()和while循環(huán),逐個輸入字符存放到value下標i的字符中,直到輸入的字符為換行符或value存滿(i=max_length)為止,當這兩個條件滿足其一,那么就應(yīng)該停止輸入,另外需要注意:value指向的字符串結(jié)尾,必須包含空字符'\0',所以下標max_length-1必須是空字符,循環(huán)輸入時,i取值最大為max_length-2。
、輔stream& operator << (ostream&outs,coast StringVar the_string);
輸出運算符重載函數(shù),題意要求將the—strin9通過輸出流outs輸出,由于the_string是StringVar對象,所以輸出的應(yīng)該是對象的成員value指向的字符串,根據(jù)返回值可知,函數(shù)必須返回輸入流ostream的引用;另外由于第一形參是輸入流outs,所以無法通過StringVar對象來調(diào)用,該函數(shù)不是類的成員函數(shù),函數(shù)定義時,不能限定StringVar作用域,由于該函數(shù)不是類的成員函數(shù),所以使用輸出流outs輸出value指向的字符串時,不能直接使用私有成員value,而是應(yīng)該使用getValue()公有成員函數(shù),返回value的值,再輸出。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |