版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 13植樹的牧羊人教學(xué)設(shè)計(jì)
- 手術(shù)部位標(biāo)記圖
- 第5單元第2章第1節(jié)《酵母菌和霉菌》教案
- 第16課 三國(guó)鼎立(教學(xué)設(shè)計(jì))2024-2025學(xué)年七年級(jí)歷史上冊(cè)同步高效課堂(統(tǒng)編版2024)
- 浙攝版信息技術(shù)六下第6課《機(jī)器人快遞員》教學(xué)設(shè)計(jì)
- 創(chuàng)設(shè)情境 聚焦表達(dá) 真情流露-9《那個(gè)星期天》教學(xué)設(shè)計(jì)
- 牛津譯林版(2019)必修 第三冊(cè)Unit 2 Natural disasters Reading教案
- 浙教版高中信息技術(shù)必修2 4.2“搭建信息系統(tǒng)”教學(xué)設(shè)計(jì)
- 第八單元第3課時(shí) 化簡(jiǎn)含有字母的式子(教學(xué)設(shè)計(jì))五年級(jí)數(shù)學(xué)上冊(cè)同步高效課堂系列 蘇教版
- 人教版(2019)必修第一冊(cè)Unit 4 Natural Disasters Listening and Talking 教案
- (高清版)AQ 2061-2018 金屬非金屬地下礦山防治水安全技術(shù)規(guī)范
- 2024年上海市各區(qū)初三語(yǔ)文一模卷試題匯編之記敘文含答案
- 2023年湖北省計(jì)算機(jī)技能高考考試備考題庫(kù)大(共5部分-5)
- 2024-2030年中國(guó)混凝土管樁行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)與投資研究分析報(bào)告
- 2024-2030年中國(guó)村鎮(zhèn)銀行行業(yè)市場(chǎng)深度調(diào)研及面臨的困境對(duì)策與發(fā)展戰(zhàn)略研究報(bào)告
- 腦心通膠囊化學(xué)成分、藥理作用及臨床應(yīng)用研究進(jìn)展
- 閩教版小學(xué)三年級(jí)上冊(cè)英語(yǔ)期中考卷附答案
- 24春國(guó)家開放大學(xué)《機(jī)電一體化系統(tǒng)綜合實(shí)訓(xùn)》大作業(yè)參考答案
- 書籍編撰合同范本
- TDT 1083-2023 國(guó)土調(diào)查數(shù)據(jù)庫(kù)更新數(shù)據(jù)規(guī)范
- 2024年廣東省農(nóng)業(yè)科學(xué)院所屬事業(yè)單位招聘47人歷年重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論