31有如下程序:
#inClude using namespaCe std: Class CD{
publiC:
~CD(){Cout<<’C’:} private:
Char name[80]; };
int main(){
CD a,*b,d[2]; return 0;
執(zhí)行這個程序的輸出結(jié)果是( )。
A.CCCCB.CCCC.CCD.C
參考答案:B
參考解析:本題考查類的析構(gòu)函數(shù).題目中定義了類的一個對象a,對象指針*b,對象數(shù)組d[2],當程序執(zhí)行完后,析構(gòu)函數(shù)執(zhí)行了3次,輸出“CCC”,對象指針不會執(zhí)行析構(gòu)函數(shù)。所以本題答案為8。
32類的析構(gòu)函數(shù)是在( )調(diào)用的。
A.類創(chuàng)建時B.創(chuàng)建對象時C.刪除對象時D.不自動調(diào)用
參考答案:C
參考解析:析構(gòu)函數(shù)可以被函數(shù)調(diào)用,也可以被系統(tǒng)調(diào)用:函數(shù)體內(nèi)的對象在函數(shù)結(jié)束時調(diào)用析構(gòu)函數(shù)和使用delete釋放對象所占用的資源。
33下列關(guān)于多態(tài)性的描述,錯誤的是( )。
A.c++語言中的多態(tài)性分為編譯時的多態(tài)性和運行時的多態(tài)性
B.編譯時的多態(tài)性可通過函數(shù)重載實現(xiàn)
C.運行時的多態(tài)性可通過模板和虛函數(shù)實現(xiàn)
D.實現(xiàn)運行時多態(tài)性的機制稱為動態(tài)綁定
參考答案:C
參考解析:編譯時的多態(tài)性是通過函數(shù)重載和模板體實現(xiàn)的,運行時的多態(tài)性是通過虛函數(shù)體實現(xiàn)的。
34下列有關(guān)類成員的敘述中,正確的是( )。
A.友元函數(shù)是類的成員函數(shù)
B.類成員的默認訪問權(quán)限是私有的
C.類成員函數(shù)必須聲明為公有的
D.類的靜態(tài)數(shù)據(jù)成員不能是常成員
參考答案:B
參考解析:友元函數(shù)是指某些雖然不是類成員卻能訪問類的所有成員的函數(shù),故友元函數(shù)不足類的成員函數(shù)。類成員的默認訪問權(quán)限是私有的,類的成員函數(shù)¨r以是3種權(quán)限中的一種,靜態(tài)數(shù)據(jù)成員可以為常成員。故本題答案為8。
35有如下程序:
#inClude
using namespaCe std; ClaSS A{
publiC:
A(int i){x=i;}
void dispa( ){Cout<
int x; };
Class B:publiC A{ publiC:
B(int i):A(i+10){x=i;}
vold dispb( ){dispa( );Cout<
int x; };
int main( )} B b(2); b.dispb( );
return 0; }
執(zhí)行這個程序的輸出結(jié)果是( )。
A.10,2B.12,10C.12,2D.2,2
參考答案:C
參考解析:本題考查派生類的構(gòu)造函數(shù)和基類的構(gòu)造函數(shù)。本題中類B繼承類A,定義了·個類B的對象并初始化b(2),此時會執(zhí)行類B的構(gòu)造函數(shù),執(zhí)行的結(jié)果是繼承類A中的私有成員賦值了12,給類B自身的數(shù)據(jù)成員x賦值了2,執(zhí)行b.dispb()后,輸出類A的私有成員x,輸出類B自身的數(shù)據(jù)成員,所以答案為C。
36執(zhí)行下列語句段后,輸出字符“*”的個數(shù)是( )。
for(int i=50;i>1;i一=2) tout<<’*’:
A.24B.25C.26D.50
參考答案:B
參考解析:本題考查for循環(huán)語句,題目中每執(zhí)行完循環(huán)體后,i都會減2,那么只有50到2之間的偶數(shù)才能輸出“*”,所以總共輸出25次。
37有如下類定義:
Class AA{ int a: PubliC: AA(int n=O):a(n){}
};
Class BB:publiC AA{ publiC:
BB(int n)
};
其中橫線處的缺失部分是( )。
A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;}
參考答案:B
參考解析:本題考查公用繼承對基類成員的訪問屬性。公用繼承中,基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有,本題中若要給派生類繼承下來基類的私有成員賦值,那么只能調(diào)用基類的成員函數(shù)來對它賦值,成員變量默認的訪問權(quán)限為私有,即a為私有變量。所以本題答案為B。
38判斷char型變量c是否為小寫字母的正確表達式是( )。
A.’a’<=c<=’z’B.(c>=A.&&(c<=z)C.(’a’>=C.||(’z’<=C.D.(c>=’a’)&&(c<=,z,)
參考答案:D
參考解析:字符型數(shù)據(jù)在計算機內(nèi)部是以ASCII碼存儲的,英文大寫字母和小寫字母在ASCII碼表中都是連續(xù)的。大寫字母A~z是從65~90,小寫字母a~z是從97~122。所以只要變量c大于等于a并月小于等于z就能保證其為小寫字母。
39決定c++語言中函數(shù)的返回值類型的是( )。
A.return語句中的表達式類型
B.調(diào)用該函數(shù)時系統(tǒng)隨機產(chǎn)生的類型
C.調(diào)用該函數(shù)時的主調(diào)用函數(shù)類型
D.在定義該函數(shù)時所指定的數(shù)據(jù)類型
參考答案:D
參考解析:c++語言中,在定義該函數(shù)時所指定的數(shù)據(jù)類瓔決定函數(shù)的返回值類型。
40設(shè)int a=1,b=2;,則(a++)+b和a+++b這兩個表達式的值分別為( )。
A.3,3B.3,4C.4,3D.4,4
參考答案:A
參考解析:單目的++運算優(yōu)先級高于雙目的+運算,不過++的結(jié)合性是自右向左的,而+是自左向右的,所以上面的兩個表達式都是先計算a+b的值之后,a再自加1。
41請使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl。程序中位于每個“//ERROR****found料****之后的一行語句有錯誤,請加以改正。改正后程序的輸出結(jié)果應(yīng)為:
Name:Smith Age:21 ID:99999 CourseNum:12
Record:970
注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內(nèi)容。
#include
using namespace std;
class Studentlnfo
{
protected:
//ERROR********************found****************
char Name;
int Age;
int ID:
int CourseNum;
float Record;
public:
Studentlnfo(char*name,int Age,int ID,int coumeNum,float record);
//ERROR ********************found********************
void~Studentlnfo(){}
float AverageRecord(){
return Record/CourseNum;
}
void show()const{
cout<<”Name:”<
<<”CourseNum:”<
}
};
//ERROR ******************found**************
StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record)
{
Name=name;
Age=age;
this一>ID=ID:
CourseNum=courseNum:
Record=record;
}
int main()
{
Studentlnfo st(’’Smith”,21,99999,12,970);
st.show();
return 0;
}
參考解析:
(1)char*Name;
(2)~Studentlnfo(){}
(3)Studentlnf0::Studentlnfo(char*name,int age,,int ID,int eourseNum,float record)
三、簡單應(yīng)用題(24分)
42請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,其中定義了vehiele類,并派生出motorcar類和bicycle類。然后以motorcar和bicycle作為基類,再派生出motorcycle類。要求將Vehicle作為虛基類,避免二義性問題。請在程序中的橫線處填寫適當?shù)拇a并刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應(yīng)為:
80
150
100
1
注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****found****”。
#include
class vehicle
{
private:
int MaxSpeed;
int Weight;
public:
//*************found************
vehicle(int maxspeed,int weight):——
~vehicle(){};
int getMaxSpeed(){return MaxSpeed;}
int getWeight(){retum Weight;}
};
//****************found************
class bicycle:——public vehicle
{
private:
int Height;
public:
bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height){}
int getHeight(){retum Height;};
};
//*******************found**************
class motorcar:——public vehicle
{
private:
int SeatNum;
public:
motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum){}
int getSeatNum(){return SeatNum;};
};
//*****************found***************
class motorcycle:——
{
public:
motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),bicycle(maxspeed,weight,
height),motorcar(maxspeed,weight,1){}
};
void main()
{
motorcycle a(80,150,100);
cout<
cout<
cout<
cout<
}
參考解析:
(1)MaxSpeed(maxspeed),Weight(weight){f;
(2)virtual
(3)virtua1
(4)public bicycle,public motorcar
四、綜合應(yīng)用題(18分)
43請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程文件proj3。本題創(chuàng)建一個小型字符串類,字符串長度不超過l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。補充完成重載賦值運算符函數(shù),完成深復(fù)制功能。
屏幕上輸出的正確結(jié)果應(yīng)該是:
Hello!
Happy new year!
補充編制的內(nèi)容寫在“//**********333**********”與“//**********666**********”兩行之間。
不得修改程序的其他部分。
注意:
程序最后調(diào)用writeToFil。函數(shù),使用另一組不同的測試數(shù)據(jù),將不同的運行結(jié)果輸出到文件0ut•dat中。
輸出函數(shù)writeToFile已經(jīng)編譯為obj文件。
//proj3.h
#include
#include
using namespace std;
class MiniString
{
pubhc:
friend。8tream&operator<<(oatream&output,const MiniString&s)//重載流插入運算符
{ output<
friend istream&operator>>(istream&input,MiniString&8)//重載流提取運算符
{ char temp[100];//用于輸入的臨時數(shù)組
temp[0]=’\0’://初始為空字符串
input>>setw(100)>>temp;
int inLen=strlen(temp);//輸入字符串長度
if(inLen!=0)
}
s.1ength=inLen;//賦長度
if(s.sPtr!=0)delete[]s.sPtr;//避免內(nèi)存泄漏
s.sPtr=Hew char[s.1ength+1];
strcpy(s.sPtr,temp);//如果8不是空指針,則復(fù)制內(nèi)容
}
else s.sPtr[0]=’\0’;//如果s是空指針,則為空字符串
retum input;
}
void modString(const char}string2)//更改字符串內(nèi)容
{
if(strin92 1=0)//如果strin92不是空指針,則復(fù)制內(nèi)容
{
if(strlen(strin92)!=length)
{
length=strlen(strin92);
delete[]sPtr;
sPtr=new char[1ength+1];//分配內(nèi)存
}
strcpy(sPtr,strin92);
}
else sPtr[0]=’\0’;//如果string2是空指針,則為空字符串
}
MiniString&operator=f const MiniString&otherString);
MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//構(gòu)造函數(shù)
{
sPtT=0:
if(1ength[=0)
setString(S);
}
~MiniString()//析構(gòu)函數(shù)
{delete[]sPtr;}
private:
int length;//字符串長度
char*sPtr;//指向字符串起始位置
void setString(const char*string2)//輔助函數(shù)
{
sPtr=Dew char[str|en(string2)+1];//分配內(nèi)存
if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指針,則復(fù)制內(nèi)容
else slur[0]='\0';//如果string2是空指針,則為空字符串
}
};
//pwj3.cpp
#'include
#include
using namespace std;
#include”proj3.h”
MiniString&MiniStrin9::0perator=(const MiniString&otherString)
{//重載賦值運算符函數(shù)。提示:可以調(diào)用輔助函數(shù)setString
//*************333**********
//*************666**********
}
int main()
{
MiniSu'ing strl(”Heuo!”),str2;
void writeToFile(const char*);
sir2=strl;//使用重載的賦值運算符
str2.modString("Happy new year!");
cout<
cout<
writeToFile("");
return 0;
}
參考解析:
length=otherString.1ength; //把對象字符串0therString的長度賦值給變量length setString(otherString.sPtr); //調(diào)用函數(shù)setstring,實現(xiàn)給類變量sptr分配空間,以及逐個把對象0therstring字符串的值復(fù)制到sptr中 return}this: //返回被賦值的對象
以上內(nèi)容是關(guān)于2016年計算機二級考試C++考前測試題及答案的介紹,由唯學(xué)網(wǎng)計算機等級考試欄目小編提供,因此考生如若獲知更多關(guān)于考試資訊、復(fù)習(xí)指導(dǎo)等內(nèi)容,請隨時關(guān)注唯學(xué)網(wǎng),小編會在第一時間為考生發(fā)布相關(guān)的報道。