《c++面向?qū)ο蟪绦蛟O(shè)計—考試題及習(xí)題講解()》由會員分享,可在線閱讀,更多相關(guān)《c++面向?qū)ο蟪绦蛟O(shè)計—考試題及習(xí)題講解()(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第一部分選擇題(共20分)一、單項選擇題(本大題共10小題,每小題2分,共20分)
1.在C++中,函數(shù)原型不能標(biāo)識(D)
A?函數(shù)的返回類型B?函數(shù)參數(shù)的個數(shù)
C.函數(shù)參數(shù)類型D函數(shù)的功能p108有敘述
2?在C++程序中,對象之間的相互通信通過(B)?
A?繼承實(shí)現(xiàn)B調(diào)用成員函數(shù)實(shí)現(xiàn)
C.封裝實(shí)現(xiàn)D.函數(shù)重載實(shí)現(xiàn)
3. 對于任意一個類,析構(gòu)函數(shù)的個數(shù)最多為(B)
A.0B.1C.2D.3
P288析構(gòu)函數(shù)不接受參數(shù),也不返回數(shù)值。類只可能有一個析構(gòu)函數(shù),不能進(jìn)行析構(gòu)函數(shù)的重載。
4. 下面函數(shù)模板定義中不正確的是(A)
A.templateQF(Qx)
2、{returnQ+x;
}
C.templateTF(Tx){returnx*x;
}
5.友元關(guān)系不能(cA)?
A繼承
B?是類與類的關(guān)系
B.template
QF(Qx){returnx+x;
}D.template
TF(Tx){returnx>1;
}
C?是一個類的成員函數(shù)與另一個類的關(guān)系p316D.提高程序的運(yùn)行效率
6. 語句ofstreamf(〃SALARY.DAT〃,ios::appIios::binary);的功能是建立流對象f,試圖打開文件SALARY.DAT并與之連接,并且(A)
A若文
3、件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個新文件B?若文件存在,將其置為空文件;若文件不存在,打開失敗
C.若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個新文件D?若文件存在,打開失??;若文件不存在,建立一個新文件
7. 下面說法正確的是(B)
A. 內(nèi)聯(lián)函數(shù)在運(yùn)行時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地方
B. 內(nèi)聯(lián)函數(shù)在編譯時是將該函數(shù)的目標(biāo)代碼插入每個調(diào)用該函數(shù)的地方
C. 類的內(nèi)聯(lián)函數(shù)必須在類體內(nèi)定義
D. 類的內(nèi)聯(lián)函數(shù)必須在類體外通過加關(guān)鍵字inline定義
8?可以用p.a的形式訪問派生類對象p的基類成員a,其中a是(D)
A.私有繼
4、承的公有成員B.公有繼承的私有成員
C.公有繼承的保護(hù)成員D.公有繼承的公有成員
9.在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,不正確的敘述是
A.派生類的對象可以賦給基類的對象
B?派生類的對象可以初始化基類的引用
C.派生類的對象可以直接訪問基類中的成員
D?派生類的對象的地址可以賦給指向基類的指針
10.對于類定義classA{
public:virtualvoidfunc1(){}voidfunc2(){}
};
classB:publicA{
public:
voidfunc1(){cout<<〃classBfunc1〃<
5、oidfunc2(){cout<<〃classBfunc2〃<
6、ivate屬性的成員。
13. 表達(dá)式coutvvend1還可表示為_cout<<”/n”;__。
14. 基類的公有成員在派生類中的訪問權(quán)限由繼承方式?jīng)Q定。
15. C++支持的兩種多態(tài)性分別是靜態(tài)多態(tài)性和動態(tài)多態(tài)性。
16. C++中語句constchar*constp=〃hello〃;所定義的指針p和它所指的內(nèi)容都不能被修改。
17?假定AB為一個類,則語句AB(AB&x);為該類_構(gòu)造?—函數(shù)的原型說明。
18. 說明常成員函數(shù)時,字const寫在成員函數(shù)的函數(shù)的參數(shù)表和函數(shù)體之間
19. 在C++中,訪問一個對象的成員所用的運(yùn)算符是指針,訪問一個指針?biāo)赶虻膶ο蟮某蓡T所
7、用的運(yùn)算符是this指針。
20. 派生類從一個或多個以前定義的該類的基類繼承數(shù)據(jù)和函數(shù)。
三、改錯題(本大題共5小題,每小題2分,共10分)
21. 指出下面程序段中的錯誤,并說明出錯原因。
classA{
inta,b;
public:
A(intaa,intbb){a=aa;b=bb;}
};
y(4,0)
Ax(2,3),y(4);
22. 指出并改正下面利用類模板的對象定義中的錯誤templateclassTany{
Tx,y;
public:
Tany(Ta,Tb){x=a,y=b;}
Tsum(){returnx+y;}
};
T
8、any(int)obj(10,100);改為Tany
23. 指出下面程序段中的錯誤,并說明出錯原因。
classone{
private:inta;
public:
voidfunc(two&);voidfunc(two&)錯誤,不能前
向申明
};classtwo{private:intb;friendvoidone::func(two&);
};
voidone::func(two&r)
{
a=r.b;
}
24. 指出下面程序段中的錯誤,并說明出錯原因。#includeclassA{
public:voidfun(){co
9、ut<<〃a.fun〃<
10、顯式地將類的數(shù)據(jù)成
員初始化protected:
intzeroX,zeroY;
intSetZero(intZeroX,intZeroY);
private:
intlength,height;
public:
floatradius;
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
四、完成程序題(本大題共5小題,共20分)根據(jù)題目要求,完成程序填空。
26. 在下面橫線處填上適當(dāng)字句,完成類中成員函數(shù)的定義。classA{
int*a;public:
A(intaa=0){
a=_newint(a
11、a)_;〃用aa初始化a所指向的動態(tài)對象
}
?A(){_deletea_;}〃釋放動態(tài)存儲空間
};
27. 下面是一個函數(shù)模板,用于計算兩個向量的和。在下面橫線處填上適當(dāng)字句完成函數(shù)模板定義。
#include
template
T*f(T*a,T*b,intn)
{
T*c=_newT[n]___;
for(inti=0;i
12、,5);
for(inti=0;i<5;i++)
cout<
#include
_char*PASS=”wolleh”;__〃定義由PASS指針?biāo)赶虻目诹顆olleh。
voidmain()
{
charuser〔10〕;〃用于存放輸入的口令
cout<<〃pleaseinputyourpassword:〃<>user;_〃輸入口令
if((strcmp(user,PASS))==0)
13、
cout<<〃yourpasswordiscorrect〃<
14、n<<”/”<
classbase{
public:
int__func(){return0;}
};
classderived:publicbase{
public:
inta,b,c;
voidsetValue(intx,inty,intz){a=x;b=y;c=z;}
intfunc(){return(a+b)*c;}
};
voidmain()
{
baseb;
derivedd;
15、cout?b.func()<
voidmain(){int*a;int*&p=a;intb=10;p=&b;cout<<*a;
}輸出為:
32. #includetemplateTf(T*a,T*b,intn){
Ts=(T)0;
for(inti=0;i
16、++)s+=a〔i〕*b〔i〕;
returns;}voidmain(){
doublec〔5〕={1.1,2.2,3.3,4.4,5.5},d〔5〕={10.0,100.0,1000.0};cout<voidmain(){
for(inti=0;i<4;i++)
cout?endlv0?O:");
}輸出為:
34.運(yùn)行下面的程序,寫出當(dāng)輸入25,60時的輸出結(jié)果。
#in
17、clude
classgoods{
private:
staticinttotalWeight;
intweight;
public:goods(intw){weigh=w;totalWeight+=w;
}goods(goods&gd)
{weight=gd.weight;totalWeight+=weight;
}
?goods()
{totalWeight-=weight;
}
intgetwg()
{
returnweight;
}
staticintgetTotal()
{
returntotalWeight;
}
};
18、
intgoods::totalWeight=0;
voidmain()
{
intw;
cout<<〃Theinitialweightofgoods:〃<>w;//輸入25
goodsg1(w);
cin>>w;//輸入60
goodsg2(w);
cout<<〃Thetotalweightofgoods:〃<
classA{
public:
A(){}
virtualvoidfunc(){cout<
19、<〃DestructorA〃<classMyClass{public:intnumber;voidset(inti);
};
intnumber=3;
voidMyClass::set(inti)
{
number=i;
}
voidmain()
{
MyClassmy1;
intnumber=10;
my1.set(5);cout<