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