2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年_第1頁(yè)
2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年_第2頁(yè)
2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年_第3頁(yè)
2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年_第4頁(yè)
2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2022-2023(2)C++程序設(shè)計(jì)學(xué)習(xí)通超星期末考試章節(jié)答案2024年classfruit{public:

fruit(){

cout<<"fruitconstructor"<答案:applebobj;YTapplecobj;apple*objPnt=&bobj;objPnt->display();objPnt=&cobj;objPnt->display();;apple*objPnt=newYTapple;objPnt.display();deleteobjPnt;classfruit{public:

fruit(){

cout<<"fruitconstructor"<答案:可以使用virtual限定fruit類中的display接口,那么apple類中的display也跟著成為虛函數(shù)。;可以使用virtual限定fruit類中的析構(gòu)函數(shù)~fruit(),那么apple類中的析構(gòu)函數(shù)~apple()也跟著成為虛析構(gòu)函數(shù)。;可以在apple的繼承聲明中使用virtual限定fruit父類,那么fruit就成為虛基類。面向?qū)ο蟪绦蛟O(shè)計(jì)中的多態(tài)有:

答案:靜態(tài)多態(tài),可以是一般的函數(shù)重載;編譯時(shí)多態(tài),可以是運(yùn)算符重載;動(dòng)態(tài)多態(tài),可以是指虛函數(shù)和基類指針的聯(lián)用;運(yùn)行時(shí)多態(tài),可以是指虛函數(shù)和基類引用的聯(lián)用面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP:Object-OrientedProgramming)的基本特征是:4

答案:封裝;抽象;繼承;多態(tài)有基類A,其直接子類B,則以下對(duì)繼承機(jī)制中的訪問控制錯(cuò)誤的是:

答案:B從A公有派生,那么在B的私有訪問控制中聲明的成員函數(shù)無(wú)法訪問基類A中的受保護(hù)成員。;B從A私有派生,那么在B的私有訪問控制聲明的成員函數(shù)無(wú)法訪問基類的受保護(hù)成員。有以下類聲明:classA{public:

A();

voidset_pub(intval);

intget();

intpub_val;protected:

voidset_pro(intval);

voidprint();

intpro_val;private:

voidset_pri(intval);

intpri_val;};classB:publicA{public:

voidfun();};classC:protectedA{public:

voidfun();};以下描述正確的是:

答案:對(duì)于類型A的成員函數(shù)set_pro,可以訪問類A的任意成員,因此以下為合法的實(shí)現(xiàn):voidA::set_pro(intval){

pub_val=val;

pro_val=val*2;

set_pri(val*3);}有以下類的聲明:classfruit{public:

fruit(stringnam,stringcol):name(nam),color(col);

stringgetname()const;

stringgetcolor()const;

voidchangecolor(stringcol);protected:

stringname;

stringcolor;};classapple:publicfruit{public:

apple(stringnam,stringcol,stringaddr);

stringgetaddress()const;

voidchangeaddress(stringaddr);protected:

stringaddress;};那么下列選項(xiàng)描述正確的是:

答案:apple是fruit的派生類,apple中的數(shù)據(jù)成員實(shí)際上有3個(gè):name,color,address。;fruit是apple的父類,我們可以使用is-A關(guān)系描述為appleisfruit面向的程序設(shè)計(jì)中,下列對(duì)使用繼承機(jī)制來(lái)定義新類型的方法描述正確的是:

答案:繼承機(jī)制是C++面向?qū)ο蟪绦蛟O(shè)計(jì)中快速定義新類型的一種方法。;使用繼承機(jī)制定義類型的好處是代碼重用。;使用繼承機(jī)制定義類型的好處是使代碼更可靠。下列對(duì)文件按ASCII文件讀寫打開時(shí),若設(shè)置以下標(biāo)記(沒有其他標(biāo)記了),則標(biāo)記含義描述正確的是:

答案:ios::in

代表讀文件,如果對(duì)應(yīng)文件不存在則報(bào)錯(cuò);ios::out代表寫文件,如果對(duì)應(yīng)文件不存在則會(huì)新建一個(gè)文件從頭開始供寫;ios::out代表寫文件,如果對(duì)應(yīng)文件存在則會(huì)將這個(gè)文件清空從頭開始待寫/star3/origin/042dc716ee520b1984a3b8ba6d3f29d4.jpg

答案:ifstreaminfile("d:/test.txt");charch;while(!infile.eof()){infile.get(ch);cout<<ch;}infile.close();;ifstreaminfile;infile.open("d:\\test.txt");charch;while(infile.get(ch))

cout.put(ch);infile.close();下列對(duì)文件的描述正確的是:

答案:文件是操作系統(tǒng)用于組織數(shù)據(jù)的基本存儲(chǔ)單位。它特指存放在外存儲(chǔ)器的數(shù)據(jù)集合。操作系統(tǒng)也會(huì)把各種和主機(jī)相關(guān)聯(lián)的設(shè)備看成是文件來(lái)管理,對(duì)這些設(shè)備的讀寫等同于對(duì)磁盤文件的讀寫。;在C++程序中,文件的讀寫操作通過(guò)文件流來(lái)工作。在使用時(shí)需要使用預(yù)編譯命令#include包含相應(yīng)的類庫(kù)。如#include等。整型數(shù)據(jù)inta=123,若輸出流outfile將a按ASCII方式寫入文件:outfile<答案:3,4下列代碼實(shí)現(xiàn)對(duì)單向鏈表Lhead中某個(gè)特定值value的查找,哪個(gè)查找工作可以直接用于后續(xù)的鏈表相應(yīng)值的刪除工作中:說(shuō)明:直接的意思是指需要?jiǎng)h除時(shí)調(diào)用封裝代碼工作就可以了,不需要第二次遍歷查找。

答案:node*find(node*head,dataTypevalue){

node*p=head,*pp=nullptr;

while(p&&p->data!=value){pp=p;

p=p->next;}

return

pp;};node*find(node*head,dataTypevalue,node*&target){

node*p=head,*pp=nullptr;

while(p&&p->data!=value){pp=p;

p=p->next;}

target=p;

return

pp;};voidfind(node*head,dataTypevalue,node*&target,node**pre){

target=head,*pre=nullptr;

while(target&&target->data!=value){*pre=target;

target=target->next;}}需要對(duì)單向鏈表Lhead進(jìn)行升序排序,以下說(shuō)法正確是:

答案:可以采用逐個(gè)向空鏈表有序插入的方法完成對(duì)單向鏈表的升序排序。具體描述如下:1、構(gòu)建空鏈表other;2、從開始遍歷Lhead。每遍歷一個(gè)結(jié)點(diǎn),從Lhead中摘除,并在other中尋找第一個(gè)比摘除點(diǎn)值大的結(jié)點(diǎn)位置:

1)找不到:如果other為空,則該點(diǎn)成為other的唯一結(jié)點(diǎn);否則追加在other的表尾;

2)找到:如果有前驅(qū)點(diǎn),則插入在前驅(qū)點(diǎn)的后面,即當(dāng)前位置之前;否則就插入在other的表首,并更新other;3、Lhead接管other(Lhead=other;);4、Lhead升序整理完畢。

;可以采用類似于數(shù)組中的選擇排序方法完成對(duì)單向鏈表的升序排序。具體描述如下:1、從頭開始遍歷Lhead;設(shè)當(dāng)前遍歷點(diǎn)為p;2、假設(shè)當(dāng)前遍歷點(diǎn)p的結(jié)點(diǎn)值為從p開始的鏈表的最小值;然后去尋找p開始的鏈表的真正最小值所在位置;3、找到位置與p不同:交換p和真正最小值所在的結(jié)點(diǎn)值;4、p遍歷鏈表的下一個(gè)結(jié)點(diǎn),重復(fù)2;直到遍歷完成。5、Lhead升序整理完畢。;逐個(gè)向空鏈表有序插入的方法也適用于數(shù)組排序,可以改為向一個(gè)空數(shù)組有序插入待排序元素,即從下標(biāo)0開始尋找第一個(gè)比插入元素大的元素的位置,然后放在這個(gè)元素之前。沒有更大的元素則放在末尾。但是會(huì)比鏈表做的慢,因?yàn)椴迦胛恢眯枰渌匾苿?dòng)騰空。假設(shè)有單項(xiàng)鏈表L1,L2分別用于模擬兩個(gè)集合A,B的存放,現(xiàn)在要構(gòu)建一個(gè)AB的并集C,并且C為升序排列集合,使用單向鏈表L3存放。A,B,C均為無(wú)重復(fù)元素的集合。那么下列工作序列描述能滿足要求的是:

答案:1、構(gòu)建空L3;2、從頭開始遍歷L1,將遍歷到的結(jié)點(diǎn)從L1中摘除,并按升序插入的方式依次添加到L3。尋找合適的插入位置是尋找第一個(gè)大于待插入結(jié)點(diǎn)值的結(jié)點(diǎn);找到則插入到該結(jié)點(diǎn)前面,否則追加到L3表尾;將L1置空。3、從頭開始遍歷L2,將遍歷到的結(jié)點(diǎn)從L2中摘除,并按升序插入的方式依次添加到L3。尋找合適的插入位置是先尋找第一個(gè)不小于待插入結(jié)點(diǎn)值的結(jié)點(diǎn);找到則判斷該節(jié)點(diǎn)值是否與待插入結(jié)點(diǎn)值相等,是則刪除L2中的對(duì)應(yīng)結(jié)點(diǎn),否則插入到找到的結(jié)點(diǎn)前面;若找不到則追加到L3表尾;將L2置空。4、L3求解完畢。;1、構(gòu)建帶哨兵的L3;1、對(duì)L1進(jìn)行升序整理2、對(duì)L2進(jìn)行升序整理3、p1是L1表首結(jié)點(diǎn),p2是L2表首結(jié)點(diǎn),若L1,L2均不空,則重復(fù)比較p1和p2的結(jié)點(diǎn)值:

1)若p1的<p2的,那么將p1的結(jié)點(diǎn)從L1中摘除添加到L3表尾,更新L1,p1;

2)若p1的>p2的,那么將p2的結(jié)點(diǎn)從L2中摘除添加到L3表尾,更新L2,p2;

3)若p1的==p2的,那么將p2的結(jié)點(diǎn)從L1中摘除添加到L3表尾,刪除p1的結(jié)點(diǎn),更新L1,p1,L2,p2。4、若L1為空,則將L2所有結(jié)點(diǎn)追加到L3的表尾;將L2置空。5、若L2為空,則將L1所有結(jié)點(diǎn)追加到L3的表尾;將L1置空。6、刪除L3的哨兵,L3求解完畢。;1、構(gòu)建空L3;2、L3接管L1(L3=L1),將L1置空。3、從頭開始遍歷L2。每遍歷到一個(gè)結(jié)點(diǎn),進(jìn)行以下工作:

1)將結(jié)點(diǎn)從L2中摘除,更新L2;

2)查驗(yàn)摘除結(jié)點(diǎn)的值是否已經(jīng)存在L3中:存在則刪除這個(gè)從L2摘下的點(diǎn);不存在則將該點(diǎn)添加到L3的表首;4、對(duì)L3進(jìn)行升序整理。5、L3求解完畢。假設(shè)有單向鏈表Lhead,結(jié)點(diǎn)類型為node,數(shù)據(jù)類型為dataType,現(xiàn)在有刪除表中value值結(jié)點(diǎn)的代碼:node*pre=nullptr,*p=Lhead;while(p&&p->data!=value){pre=p;p=p->next;}if(p){

if(pre)

pre->next=p->next;

elseLhead=p->next;

deletep;}下列說(shuō)法正確的是:

答案:若要將該功能設(shè)計(jì)成函數(shù),則可能的設(shè)計(jì)如下:node*

deleteValue(node*head,dataTypevalue){

node*pre=nullptr,*p=head;

while(p&&p->data!=value){pre=p;p=p->next;}

if(p){

if(pre)

pre->next=p->next;

elsehead=p->next;

deletep;

}

returnhead;}調(diào)用形式為L(zhǎng)head=deleteValue(Lhead,x);//假設(shè)x為dataType類型的變量;若要將該功能設(shè)計(jì)成函數(shù),則可能的設(shè)計(jì)如下:void

deleteValue(node*&head,dataTypevalue){

node*pre=nullptr,*p=head;

while(p&&p->data!=value){pre=p;p=p->next;}

if(p){

if(pre)

pre->next=p->next;

elsehead=p->next;

deletep;

}}調(diào)用形式為deleteValue(Lhead,x);//假設(shè)x為dataType類型的變量;若要將該功能設(shè)計(jì)成函數(shù),則可能的設(shè)計(jì)如下:void

deleteValue(node**head,dataTypevalue){

node*pre=nullptr,*p=*head;

while(p&&p->data!=value){pre=p;p=p->next;}

if(p){

if(pre)

pre->next=p->next;

else*head=p->next;

deletep;

}}調(diào)用形式為deleteValue(&Lhead,x);//假設(shè)x為dataType類型的變量下列代碼段能完成對(duì)鏈表Lhead的逆置工作的是:假設(shè)Lhead為鏈表的頭指針,鏈表的結(jié)點(diǎn)類型為node,結(jié)點(diǎn)的數(shù)據(jù)類型為dataType,逆置后的鏈表仍然為L(zhǎng)head。

答案:node*p=Lhead;Lhead=nullptr;while(p){

node*temp=p;

p=p->next;

temp->next=Lhead;

Lhead=temp;};node*other=nullptr;node*p=Lhead;whiel(Lhead){

Lhead=Lhead->next;

p->next=other;

other=p;

p=Lhead;}Lhead=other;;node*other=newnode,othertail=other;

othertail->next=nullptr;node*tail1,*tail2;while(Lhead){

for(tail2=nullptr,tail1=Lhead;tail1->next;tail2=tail1,tail1=tail1->next);

othertail->next=tail1;

othertail=tail1;

if(tail2)

tail2->next=nullptr;

elseLhead=nullptr;}Lhead=other->next;deleteother;對(duì)于鏈表刪除某一個(gè)值和刪除某一個(gè)特定位置的結(jié)點(diǎn)的描述正確的是:

答案:刪除值需要先查找到該值所在的位置,然后再進(jìn)行相應(yīng)結(jié)點(diǎn)的刪除處理;;刪除某個(gè)特定位置的結(jié)點(diǎn)可以不必要知道結(jié)點(diǎn)中的值,只要做對(duì)應(yīng)結(jié)點(diǎn)的刪除處理。;對(duì)與刪除某個(gè)特定值或者某個(gè)特定位置結(jié)點(diǎn),只要這個(gè)值或者位置不是表首,那么我們都需要知道該值或者位置的前驅(qū)結(jié)點(diǎn)才可以做相應(yīng)的刪除動(dòng)作。對(duì)代碼段:node*pre=nullptr,*p=head;while(p&&p->next){pre=p;p=p->next;}描述正確的是

答案:當(dāng)鏈表為空表時(shí),該代碼也不會(huì)出錯(cuò);該代碼的目標(biāo)是定位p是鏈表的表尾結(jié)點(diǎn),同時(shí)保存鏈表的倒數(shù)第二個(gè)結(jié)點(diǎn)。;該代碼可能的情況有:鏈表為空,那么p也是空;鏈表只有一個(gè)結(jié)點(diǎn),那么p就是這個(gè)結(jié)點(diǎn)。鏈表有兩個(gè)結(jié)點(diǎn),那么pre是表首結(jié)點(diǎn)。鏈表有兩個(gè)以上的結(jié)點(diǎn),那么p是表尾結(jié)點(diǎn)。下列能將value值從集合中刪除的正確代碼段是:(假設(shè)集合中最多包含一個(gè)value值)

答案:node*pos=head,*pre=nullptr;while(pos&&pos->data!=value){pre=pos;pos=pos->next;}if(pos){

if(pre==nullptr)

head=pos->next;

else

pre->next=pos->next;

deletepos;}假設(shè)數(shù)組和鏈表的已知如課程所示,那么下列代碼可以實(shí)現(xiàn)往升序集合中添加最小元素value的是:

答案:node*p=head;if(head){

head=newnode;

head->data=value;

head->next=p;

}else{

head=newnode;

head->data=value;

head->next=nullptr;};node*Nnode=newnode;Nnode->data=value;Nnode->next=nullptr;node*p=head,*pre=nullptr;while(p&&p->datanext;

}if(pre){

pre->next=Nnode;Nnode->next=p;

}else{

Nnode->next=p;

head=Nnode;

}下列對(duì)數(shù)組和鏈表工作描述正確的是:

答案:對(duì)于數(shù)組表達(dá)的數(shù)據(jù)集合,最快向集合中添加元素的方法是添加在數(shù)據(jù)集的尾部;對(duì)于鏈表表達(dá)的數(shù)據(jù)集合,最快向集合中添加元素的方法是添加在數(shù)據(jù)集的頭部;;若數(shù)組中的數(shù)據(jù)集是升序,那么向該數(shù)據(jù)集添加元素最差的情況是添加最小元素;若鏈表中的數(shù)據(jù)集是升序,那么向該數(shù)據(jù)集添加最小元素是最好的情況;;已知一個(gè)包含value值的集合分別用數(shù)組和鏈表存儲(chǔ),那么從數(shù)組中刪除value比從鏈表中刪除value麻煩,因?yàn)橐婕霸氐囊苿?dòng)。給定以head指示的鏈表,有下列對(duì)鏈表內(nèi)值value的查找代碼:node*pre=nullptr,p=head;while(p&&p->data!=value){pre=p;p=p->next;}針對(duì)代碼執(zhí)行后pre和p的描述正確的是:

答案:若p為空,且pre為空,表示鏈表為空;若p不為空,表示p->data就是value,且pre不為空則表示p不是鏈表的頭結(jié)點(diǎn)。有數(shù)組inta[5]={1,2,3,4,5};下列代碼建立的鏈表能讓鏈表從表頭head開始訪問的輸出結(jié)果為5,4,3,2,1的是:

答案:node*head=newnode,*p;inti=0;head->data=a[i];head->next=nullptr;while(i<4){

i++;

p=newnode;

p->data=a[i];

p->next=head;

head=p;};node*head=nullptr,*p;inti=0;while(i<5){

p=newnode;

p->data=a[i];p->next=head;

head=p;

i++;};node*head,*p=nullptr;inti=0;while(i<5){

head=newnode;

head->data=a[i];head->next=p;

p=head;

i++;}在單向鏈表中,head是表首,有定義:node*p=head->next;那么描述表的第三個(gè)結(jié)點(diǎn)的地址的是:

答案:head->next->next;p->next;下列對(duì)單向鏈表描述正確的是:

答案:鏈表和數(shù)組一樣均可以用于批量數(shù)據(jù)的存儲(chǔ)和處理;由于鏈表采用的是化整為零的策略,因此,在將剛好存放10個(gè)元素的鏈表或者數(shù)組,調(diào)整空間以適應(yīng)12個(gè)元素的存儲(chǔ)的要求下,鏈表比數(shù)組容易。模板類實(shí)例化是通過(guò)在聲明對(duì)象時(shí)使用類名后加尖括號(hào)內(nèi)指定具體的類型來(lái)實(shí)例化的,這個(gè)具體的類型不可以是模板類。即如:compare>這樣的描述是不被允許的

答案:錯(cuò)如果一個(gè)類稱為模板類,那么該類的所有成員函數(shù)自動(dòng)的稱為模板函數(shù)。類屬參數(shù)必須出現(xiàn)在他們的形參類型描述中。

答案:錯(cuò)模板類定義的類屬參數(shù),可以使用在:

答案:類的數(shù)據(jù)成員的類型描述中;類的成員函數(shù)的返回類型描述中;類的成員函數(shù)的形參類型描述中下類對(duì)類型轉(zhuǎn)換的實(shí)際應(yīng)用描述正確的是:

答案:complexa;doubleb=2.3;a=b;這樣的賦值可以工作的前提是在complex類內(nèi)有構(gòu)造函數(shù):complex(doublex){real=x;image=0;};complexa(2,3);doubleb;b=a;這樣的賦值可以工作的前提是在complex類內(nèi)有類型轉(zhuǎn)換函數(shù):operatordouble(){

returnreal+image;};若在complex類內(nèi)定義的類型轉(zhuǎn)換函數(shù)如下:explicitoperatordouble(){

returnreal+image;}那么,complexa(2,3);doubleb;b=a;這樣的賦值就不能工作。因?yàn)殡[式類型轉(zhuǎn)換被限制。下列對(duì)類類型轉(zhuǎn)換描述正確的是:

答案:自定義的類類型A需要轉(zhuǎn)換成其他類型,必須要在A的定義中添加一個(gè)類型轉(zhuǎn)換的成員函數(shù)。;由于類型轉(zhuǎn)換的成員函數(shù)定義時(shí)沒有參數(shù),所以該轉(zhuǎn)換函數(shù)就沒有重載形式,就是不能為類型定義兩個(gè)相同的轉(zhuǎn)換描述。比如在complex中寫兩個(gè)double型的轉(zhuǎn)換函數(shù)是不可能的。;可以為自定義類型A定義多個(gè)類型轉(zhuǎn)換函數(shù)來(lái)實(shí)現(xiàn)A向多個(gè)類型的轉(zhuǎn)換。在--運(yùn)算符重載中,帶參的形式是后置運(yùn)算形式重載,它的效率比前置的運(yùn)算形式要好。

答案:錯(cuò)為vector重載的下標(biāo)運(yùn)算也可以這樣實(shí)現(xiàn)vector聲明參考課內(nèi)):intgarbage=INT_MAX;int&vector::operator[](unsignedindex){

if(index<0||index>=maxsize)returngarbage;

intresult(table[index]);

returnresult;}

答案:錯(cuò)下列對(duì)運(yùn)算符的重載描述正確的是:

答案:賦值重載是類機(jī)制中唯一一個(gè)會(huì)缺省給與的運(yùn)算符重載。它一定是類內(nèi)的成員。;如果要為自定義類A設(shè)計(jì)下標(biāo)運(yùn)算符[]的重載,那么這個(gè)重載函數(shù)的返回類型可以根據(jù)使用的需要可以設(shè)計(jì)為void,A或者A&下列為復(fù)數(shù)類complex(complex的類聲明參考課程)設(shè)計(jì)加運(yùn)算,能完成3個(gè)complex對(duì)象的求和,如:complexa(3,4),b(2,4),c;可行的設(shè)想有:

答案:為complex設(shè)計(jì)類外函數(shù)operator+,并在complex中添加該函數(shù)的友元聲明,函數(shù)實(shí)現(xiàn)為:

complexoperator+(complex

a,complexb){

complexresult(a.real+b.real,a.image+b.image);

returnresult;}使用形式:a+b+c;;為complex設(shè)計(jì)類外函數(shù)add,并在complex中添加該函數(shù)的友元聲明,函數(shù)實(shí)現(xiàn)為:complexadd(constcomplex&a,constcomplex&b,constcomplex&c){

complexresult(a);

result.real+=b.real+c.real;

result.image+=b.image+c.image;

returnresult;}使用形式:add(a,b,c);下列運(yùn)算符允許重載的有:

答案:+;++;[]友元不能傳遞的意思是指,如果在類型A中聲明friendclassB;且在類型B中聲明friendclassC;不等價(jià)于在A中聲明friendclassC;

答案:對(duì)友元不是雙向的,表示如果在類型A中聲明了friendclassB;那么在類型B中就不能聲明friendclass

A;

答案:錯(cuò)對(duì)于下列類型A來(lái)說(shuō):classA{public:

A(intvx):x(vx){

}

voidsetx(intvx){x=vx;}private:

intx;};只要在類B中添加聲明friendclassA;

那么類B中的成員函數(shù)f就可以訪問類型A對(duì)象的私有數(shù)據(jù)成員。

答案:錯(cuò)對(duì)于下列類型A來(lái)說(shuō):classA{public:

A(intvx):x(vx){

}

voidsetx(intvx){x=vx;}private:

intx;};由于沒有給出訪問其私有數(shù)據(jù)成員x的公有接口,所以定義在類以外的普通函數(shù)f無(wú)法訪問類型A對(duì)象的私有數(shù)據(jù)成員,除非將這個(gè)函數(shù)f聲明為A的友元函數(shù)。

答案:對(duì)classA{

public:

staticintf(){returnx;}private:

staticintx;};那么在主函數(shù)中,可以這樣使用:intA::x=4;intmain(){

cout<答案:錯(cuò)類的靜態(tài)成員函數(shù)可以讀寫類的任何數(shù)據(jù)成員,包括const數(shù)據(jù)成員,非const數(shù)據(jù)成員,非static數(shù)據(jù)成員,static數(shù)據(jù)成員。

答案:錯(cuò)static限定的數(shù)據(jù)成員若放在privte訪問控制后,那么在main函數(shù)中也可以通過(guò)

類型::這樣的類域限定來(lái)訪問該數(shù)據(jù)成員。

答案:錯(cuò)static可以用于修飾類的數(shù)據(jù)成員和類的成員函數(shù)

答案:對(duì)有定義classA{public:

A(intvx):x(vx){

}

intgetx(){returnx;}private:

intx;};下列用來(lái)保護(hù)對(duì)象數(shù)據(jù)的策略正確的是:

答案:將數(shù)據(jù)成員x限定為const以保證A的所有對(duì)象的數(shù)據(jù)都不被修改;定義A的實(shí)例對(duì)象的時(shí)候,定義constA這樣的常對(duì)象就可以保護(hù)該對(duì)象的數(shù)據(jù)不被修改。;constA&或者constA*都可以設(shè)計(jì)為函數(shù)的形參類型以保護(hù)形參關(guān)聯(lián)的A對(duì)象不會(huì)被函數(shù)修改。有以下定義:classA{public:

A(intvx){x=vx;}

voidf(intvx){x=vx;}

intgetx(){returnx;}private:

intx;};要為類型A設(shè)計(jì)類外的一個(gè)無(wú)返回值的函數(shù)fun,用于接收一個(gè)A類型的對(duì)象,如intmain(){

A

obj(3);

fun(obj);

return0;}先要求約束fun不能對(duì)obj的值做修改,那么下列可行的辦法是

答案:聲明obj時(shí),聲明為constAobj(3);就可以了。;將fun的形參設(shè)計(jì)為A就可以了,如void

fun(A

objx);有以下定義:classA{public:

A(intvx){x=vx;}

intgetx(){returnx;}private:

intx;};那么下列用法錯(cuò)誤的是:

答案:constAobj(3);A&ra=obj;;Aobj(3);A*pa=&obj;constA*&rpa=pa;cout<<rpa->getx();下列對(duì)const在類A中的說(shuō)法正確的是:classA{public:

A(intvx):x(vx){

}

intgetx(){returnx;}private:

intx;}

答案:可以使用const限定的類的數(shù)據(jù)成員x,稱為常數(shù)據(jù)成員;可以使用const限定類的成員函數(shù)getx,稱為常成員函數(shù);可以使用const限定類型的聲明,定義常對(duì)象,如:constAobj(3);;可以使用const限定指針的聲明,定義常對(duì)象的指針,如:constA*

ptr;下列對(duì)于類內(nèi)賦值重載運(yùn)算的說(shuō)法正確的是:

答案:若一個(gè)類的數(shù)據(jù)成員沒有涉及動(dòng)態(tài)申請(qǐng)的空間,那么哪怕這個(gè)類的數(shù)據(jù)成員有指針類型,缺省的賦值重載函數(shù)也足夠使用了。;一個(gè)設(shè)定返回類型為類型引用的賦值重載運(yùn)算,可以正確處理a=(b=c)和(a=b)=c這樣的復(fù)合運(yùn)算,也可以處理自賦值的情形。對(duì)于如下定義的類AclassA{};下列說(shuō)法正確的是:

答案:可以按如下方式聲明這個(gè)類的對(duì)象obj;A

obj;因?yàn)橄到y(tǒng)會(huì)提供缺省的無(wú)參構(gòu)造函數(shù)來(lái)實(shí)例化對(duì)象obj;可以按如下方式聲明這個(gè)類的對(duì)象other;A

obj,other(obj);因?yàn)橄到y(tǒng)會(huì)提供缺省的拷貝構(gòu)造函數(shù)來(lái)實(shí)例化對(duì)象other有以下類型的定義:classA{public:

A(intvx=0):x(vx){

}

intgetx()const{returnx;}private:

intx;};并且有對(duì)象聲明:A

a(3),b(4),c;能完成以下執(zhí)行語(yǔ)句,且保證b、c數(shù)據(jù)保持一致的賦值重載是:(c=a)=b;

答案:A&

A::operator=(constA&right){

x=right.x;

return*this;}下列對(duì)于類內(nèi)的賦值運(yùn)算成員函數(shù)說(shuō)法錯(cuò)誤的是:

答案:若有以下Box類的對(duì)象定義,那么Boxa(20,30,40),b(a);這里的對(duì)象b是采用拷貝構(gòu)造實(shí)例化的;而使用Box

a(20,30,40),b=a;這里的對(duì)象b是使用賦值重載函數(shù)實(shí)例化的。閱讀下列程序,寫運(yùn)行結(jié)果classFOO{public:

FOO();

FOO(constFOO&);

~FOO();};FOO::FOO(){cout<<"constructor"<答案:constructorconstructorcopyconstructordestructordestructordestructor閱讀下列程序,寫運(yùn)行結(jié)果:#includeusingnamespacestd;

classFOO{public:

FOO(int);

FOO(constFOO&);

~FOO();

intget();private:

int*pointer;};FOO::FOO(inti){cout<<"constructor"<答案:constructorcopyconstructorcopyconstructor15destructordestructordestructor讀下列程序?qū)戇\(yùn)行結(jié)果,請(qǐng)從程序中拷貝內(nèi)容填寫:#includeusingnamespacestd;

constunsignedlongMEGA_BYTE=(unsignedlong)1024*1024;classcomputer{public:

computer(unsignedlongmem,unsignedlonghd,intcd){

memory=mem;

hard_disk=hd;

cdrom=cd;

if(memory>(unsignedlong)16*MEGA_BYTE){

cout<<"你至少可以安裝windows95及以上的操作系統(tǒng)!\n";

}else{

cout<<"你只能安裝windows3.2的操作系統(tǒng)!\n";

}

if(hard_disk>(unsignedlong)800*MEGA_BYTE){

cout<<"你可以安裝VisualC++!\n";

}else{

cout<<"你只能安裝BorlandC++!\n";

}

if(cdrom>4)

cout<<"你可以看VCD!\n";

elsecout<<"你只能聽CD!\n";}~computer(){

cout<<"你應(yīng)該好好利用你的電腦!\n";}private:

unsignedlongmemory;

unsignedlonghard_disk;

unsignedlongcdrom;};

intmain(){

computermy_computer(32*MEGA_BYTE,1024*MEGA_BYTE,8);

cout<<"我有一臺(tái)電腦!\n";

return0;}

答案:你至少可以安裝windows95及以上的操作系統(tǒng)!你可以安裝VisualC++!你可以看VCD!我有一臺(tái)電腦!你應(yīng)該好好利用你的電腦!拷貝構(gòu)造函數(shù)的參數(shù)的類型必須設(shè)計(jì)為類的引用。

答案:對(duì)拷貝構(gòu)造函數(shù)因?yàn)榭截悩?gòu)造函數(shù)有參數(shù),所以也可以為拷貝構(gòu)造函數(shù)的參數(shù)指定默認(rèn)參數(shù)值。

答案:對(duì)有類定義如下:classA{public:

A(intvx=0):value(vx){

}private:

intvalue;};那么在主函數(shù)中:A*p=newA[3]{A(9)};實(shí)際只申請(qǐng)了一個(gè)A類型的對(duì)象空間,所以使用delete

p;來(lái)回收空間是正確的。

答案:錯(cuò)若一個(gè)類的定義如下:classA{public:

A(intvx):value(vx){

}private:

intvalue;};那么在主函數(shù)中:A

obj[3]={A(3)};這樣的聲明是錯(cuò)誤的。

答案:對(duì)每個(gè)對(duì)象都有一個(gè)this指針,對(duì)象使用類的接口實(shí)際是通過(guò)this指針來(lái)調(diào)用的。

答案:對(duì)若一個(gè)類中的數(shù)據(jù)成員a是整型指針,且在構(gòu)造時(shí)使用a去申請(qǐng)了一個(gè)動(dòng)態(tài)的數(shù)組空間,如果這個(gè)類的其他操作接口沒有做該動(dòng)態(tài)空間的回收,那么我們應(yīng)該定制這個(gè)類的析構(gòu)函數(shù)以便去釋放這個(gè)動(dòng)態(tài)的數(shù)組空間。

答案:對(duì)一個(gè)類可以有多個(gè)構(gòu)造函數(shù),卻只能有一個(gè)析構(gòu)函數(shù)的原因是析構(gòu)函數(shù)不能設(shè)計(jì)參數(shù),因此不允許重載。

答案:對(duì)析構(gòu)函數(shù)和構(gòu)造函數(shù)一樣,不能指定返回類型。與構(gòu)造不同,析構(gòu)的使用表示對(duì)象聲明的終結(jié),因此在析構(gòu)函數(shù)內(nèi)放return是錯(cuò)誤的,一個(gè)消失的對(duì)象不需要再回到程序中。

答案:錯(cuò)系統(tǒng)會(huì)為沒有寫析構(gòu)函數(shù)的類提供缺省的析構(gòu)函數(shù),缺省析構(gòu)函數(shù)的函數(shù)體為空。

答案:對(duì)析構(gòu)函數(shù)的函數(shù)名和構(gòu)造函數(shù)一樣,也是使用了類定義的標(biāo)識(shí)符,那么析構(gòu)函數(shù)實(shí)際上是構(gòu)造函數(shù)的重載形式。

答案:錯(cuò)有類定義如下:classA{public:A(int&a){x=&a;cout<答案:構(gòu)造函數(shù)可以輸出初始化值的地址;可以為這個(gè)類添加一個(gè)修改類外數(shù)據(jù)的操作,如:voidmod(){*x=6;}表示將該類的對(duì)象關(guān)聯(lián)的外部數(shù)據(jù)修改為6;這個(gè)類一個(gè)可能的使用為:intage=16;A

obj(age);這是一個(gè)合理的類A對(duì)象的定義形式。有類定義:class

A{public:intgetx()const{returnvx;}intgety(){returnvy;}private:intvx,vy;};那么下列構(gòu)造函數(shù)可以在這個(gè)類中正常工作的是:

答案:A(intvx,intvy):vx(vx),vy(vy){

};A(intx=0,inty=0):vx(x),vy(y){

};A(){

vx=2;

vy=3;return;

}下列對(duì)構(gòu)造函數(shù)說(shuō)法正確的是:

答案:構(gòu)造函數(shù)的函數(shù)名必須和它的類名一樣;構(gòu)造函數(shù)可以有參數(shù),也可以沒有,根據(jù)對(duì)象的實(shí)例化需要而定有類定義:class

x{public:intgetx()const{returnvx;}intgety(){returnvy;}voidset(intx,inty):vx(x),vy(y){

}private:intvx,vy;};下列說(shuō)法正確的是:

答案:這個(gè)類中,成員函數(shù)set對(duì)數(shù)據(jù)成員的值設(shè)置使用了初始化列表,這是錯(cuò)誤的。下列對(duì)構(gòu)造函數(shù)說(shuō)法錯(cuò)誤的是:

答案:構(gòu)造函數(shù)不允許有返回值。那么我們?cè)谠O(shè)計(jì)構(gòu)造函數(shù)時(shí),可以將它的返回類型設(shè)計(jì)為void。對(duì)于類的數(shù)據(jù)成員,我們可以叫它們:屬性、特征,也可以叫它們:操作、行為。

答案:錯(cuò)若我們?cè)诔绦蛑卸x了一個(gè)游泳池類pool,但是沒有聲明游泳類實(shí)例,那么程序也會(huì)為pool類分配空間。

答案:錯(cuò)若我們定義了以下類型:class

A{public:

voidset_x(intval){x=val;}

intget_x(){returnx;}private:

intx;};那么下面說(shuō)法正確的是:

答案:我們可以在主函數(shù)中聲明A的數(shù)組,并配合有以下的使用,如:A

a[3];a[1].set_x(3);

;我們可以在主函數(shù)中聲明A的指針,并配合有以下的使用,如:A

*pa=newA;pa->set_x(3);下列聲明有語(yǔ)法錯(cuò)誤的是:

答案:classPOINT{

public:

intget_x();

intget_y();private:

intx,y;};classLINE{

public:

intdraw();

intis_on_line(intx,inty);

private:

intstart_x=0,start_y=0;

intend_x,end_y;

};在C++的自定義類型機(jī)制中,使用class和使用struct關(guān)鍵字定義的類型我們都稱為類類型。

答案:錯(cuò)一個(gè)類庫(kù)構(gòu)成包括類的聲明和類的實(shí)現(xiàn)(類的成員函數(shù)的實(shí)現(xiàn))

答案:對(duì)有以下聲明:classA{public:voidfx()const;voidfy();private:intx,y;};那么下列用法沒有語(yǔ)法錯(cuò)誤的是:

答案:voidA::fy(){

x=3;

y=4;}下列對(duì)于類的訪問控制描述錯(cuò)誤的是:

答案:類的成員函數(shù)有特殊的訪問控制字const下面對(duì)類的數(shù)據(jù)成員聲明的描述,錯(cuò)誤的是:

答案:類的數(shù)據(jù)成員在聲明時(shí)若使用const指定為常量,那么必須在聲明時(shí)初始化;//比如要把5個(gè)國(guó)家的名字放一起,金磚5國(guó)BRICS//Brazil,Russia,India,China,SouthAfrica//放在一起構(gòu)建一個(gè)字符串集合dd,采用下列聲明:char(*dd)[12];

請(qǐng)結(jié)合前面學(xué)過(guò)的知識(shí),寫一個(gè)表達(dá)式完成字符串集dd的構(gòu)建。

答案:dd=newchar[5][12]{"Brazil","Russia","India","China","SouthAfrica"};在一個(gè)可能包含10個(gè)字符串的集合的使用需求下,下列存儲(chǔ)設(shè)計(jì)均能滿足該使用需求的是(假設(shè)集合中最長(zhǎng)的字符串為“information”):

答案:chara[10][20];;char*pa[10];for(inti=0;i<10;i++)

pa[i]=newchar[12];;chara[200];若需要我們?yōu)镃風(fēng)格的字符串寫一個(gè)拷貝函數(shù),則在聲明:char

s[20];chart[20]="MynameisJack.";和使用輸出語(yǔ)句:cout<答案:char*strcpy(chars1[],chars2[]);;char*strcpy(char*s1,char*s2);;char*strcpy(char*s1,constchar*s2);下列描述錯(cuò)誤的是:

答案:對(duì)于C風(fēng)格的字符串,我們可以實(shí)現(xiàn)字符串引用的概念。如:chara[]="ABCD"char*&ra=a;下列對(duì)于擴(kuò)展類型string說(shuō)法錯(cuò)誤的是:

答案:string型數(shù)據(jù)使用自己的getline()接口來(lái)獲得包含分隔符的輸入。下列字符數(shù)組a,被初始化為字符串成功:使用cout<答案:chara[]={65,66,67,68,0,9};;chara[4]={'a','b','c'};;chara[5]={'a','\0',0x44,'b','c'};在聲明:char

a[]="mynameisJennie.";constchar*pa=a;前提下,下列語(yǔ)句哪個(gè)是有語(yǔ)法錯(cuò)誤的?

答案:*(pa+11)='F';有字符串緩存:chara[100];則下列想要讀入"helloworld"內(nèi)容的輸入哪個(gè)是錯(cuò)誤的?

答案:cin>>a;下列字符串a(chǎn)初始化方式錯(cuò)誤的是:

答案:constchart[]="interesting";chara[]=t;有以下聲明:chara[5]={'W','O','R','L','D'};charb[6]={'W','O','R','L','D'};shortc[5]={0x4142,0x4344,0x4546,0x4748};則下列說(shuō)法錯(cuò)誤的是:

答案:由于a不是字符串,因此cout<有聲明:chara[5]={65,'a','b','c','0'};則下列說(shuō)法正確的是:

答案:使用語(yǔ)句:a[3]=0;cout<有聲明:chara[10]={0x48,0x41,'d','\0','h','i',0,'k','p','q'};下列輸出操作可能顯示亂碼的是:

答案:cout<<(a+7)<有聲明:chara[10]={0x48,0x41,'d','\0','h'};下列操作可以顯示數(shù)組a所有內(nèi)容的是:

答案:for(inti=0;i<10;i++)cout<有函數(shù)定義如下:1)

intf(inta=0,intb=0){

cout<

T

f(T

x,Ty){

cout<答案:如有函數(shù)調(diào)用:f();

則調(diào)用的是1)版本;如有函數(shù)調(diào)用f(3);則調(diào)用的是1)版本;如有函數(shù)調(diào)用f(3.6);則調(diào)用的是1)版本;如有函數(shù)調(diào)用f('a','b');則調(diào)用的是2)版本下列函數(shù)組,哪個(gè)不符合函數(shù)重載的要求?

答案:typedef

intFLOAT;int

f(int);FLOAT

f(FLOAT);;intf(int&);unsignedf(int&);下列對(duì)于模板函數(shù)的說(shuō)法,錯(cuò)誤的是:

答案:模板函數(shù)的形參類型可以不使用模板參數(shù)使用了哪個(gè)關(guān)鍵字可以看出來(lái)應(yīng)用了模板機(jī)制:

答案:template有如下主函數(shù)描述:intmain(){

intp=2;

//ff(?)=3;函數(shù)ff調(diào)用

cout<答案:int&ff(int*x){

return*x;}調(diào)用ff(&p)=3;;int&ff(int&x){

returnx;}調(diào)用ff(p)=3;有如下主函數(shù)描述:intmain(){

int*p;

p=ff();

cout<<*p<答案:int*ff(){

int*x=newint(2);

returnx;}

;inta;int*ff(){

a=2;

return&a;}下列程序段的輸出結(jié)果是:inta=5;intf();intmain();{

for(inti=1;i<=3;i++)

cout<答案:234下列對(duì)于函數(shù)返回值的說(shuō)法錯(cuò)誤的是:

答案:函數(shù)如果需要計(jì)算3個(gè)整型結(jié)果返回給調(diào)用方,可選的策略是返回一個(gè)數(shù)組,可能的原型描述為:int[3]

f();關(guān)于設(shè)計(jì)安全的參數(shù)(不能通過(guò)形參修改調(diào)用方的值),以下考慮正確的是:

答案:設(shè)計(jì)數(shù)組類型的參數(shù)時(shí),為防止誤改調(diào)用方的值,可以使用const限定參數(shù):如:voidf(constint

a[]){

。。。。。。};設(shè)計(jì)指針類型參數(shù)時(shí),為防止誤改調(diào)用方的值,可以使用const限定參數(shù):如:voidf(constint*a){

......};設(shè)計(jì)引用類型參數(shù)時(shí),為防止誤修改調(diào)用方值,可以使用const限定參數(shù):如:voidf(constint&a){

......}有以下數(shù)組聲明:inta[10]={1,2,3,4,5,6,7,8,9,10};intb[2][5]={{2,4,6,8,10},{12,14,16,18,20}};有以下求和的函數(shù)定義:intf(intx[],intsize){

intresult=0;

for(inti=0;i答案:f(b[1],5);;g(&b[1],1,5);有以下數(shù)組聲明:inta[10]={1,2,3,4,5,6,7,8,9,10};intb[2][5]={{2,4,6,8,10},{12,14,16,18,20}};有以下求和的函數(shù)定義:intf(intx[],intsize){

intresult=0;

for(inti=0;i答案:f(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論