點擊查看:2018年9月計算機二級C++考前基礎練習題及答案匯總
1.下列關于C++流的描述中,錯誤的是( )。
A.cout>>’A’表達式中輸出字符A
B.eof函數可以檢測是否到達文件尾
C.對磁盤文件進行流操作時,必須包含頭文件fstream
D.以ios_base::Out模式打開的文件不存在時,將自動建立一個新文件
2.有如下程序:
#include
usingnamespacestd;
classToy{
public:
Toy(char*_n){strcpy(name,_n);count++;)
~Toy( ){count一一;)
char*GetName( ){returnname;}
staticintgetCount( ){returncount;)
private:
charname[10];
staticintcount;
};
intToy::count=0;
intmain( ){
Toyt1("snoopy"),t2("Mickey"),t3("Barbie");
tout
)
運行時的輸出結果是( )。
A.1
B.2
C.3
D.運行時出錯
3.有如下程序:
#include
usingnamespacestd;
classA{
public:
A(inti):rl(i){)
voidprint( ){cout<<’E’
intr1:
};
intmain( ){
Aal(2);constAa2(4);,
al.print( );a2.print( );
return0;
}
運行時的輸出結果是( )。
A.運行時出錯
B.E2一C16一
C.C4一Cl6一
D.E2一E4—
4.有如下程序:
#include
usingnamespacestd;
className{
charname[20];
public:
Name( ){
strcpy(name,"");cout<<’?’;
}
Name(char*fname){
strcpy(name,fname);cout<<’?’;
}
};
intmain( ){
Namenames[3]={Name(”張三”),Name(”李四”));
return0;
}
運行此程序輸出符號?的個數是( )。
A.O
B.1
C.2
D.3
5.有如下程序:
#include
usingnamespacestd;
classAA{
public;
AA( ){cOUt<<’1’;)
};
classBB:publicAA{
intk;
public:
BB( ):k(0){tout<<’12’;}
BB(intn):k(n)(cout<<’3’;)
};
intmain( ){
BBb(4),c;
return0;
}
運行時的輸出結果是( ).
A.1312
B.132
C.32
D.1412
6.有如下程序:
#include
usingnamespacestd;
classC1{
public:
~C1( ){cout<<1;)
};
classC2:publicC1{
public:
~C2( ){cout<<2;)
};
intmain( ){
C2cb2;
C1*cb1:
return0;
}
運行時的輸出結果是( )。
A.121
B.21
C.211
D.12
7.有如下程序:
#include
usingnamespacestd;
classPublication{//出版物類
charname[30];
public:
Publication(char*name=”未知名稱”){
~strcpy(this一>name,name);
}
constchar*getName( )const{returnname;}
virtualconstchar*getType( )const{return”未知類型”;}
};
classBook:publicPublication{//書類
public:
Book(char*name):Publication(name){}
virtualconstchar*getType( )const{return"書";}
};
voidshowPublication(Publication&p){
cout
}
intmain( ){
Bookbook(”精彩人生”);
showPublication(book);
return0;
}
運行時的輸出結果是( )。
A.未知類型:未知名稱
B.未知類型:精彩人生
C.書:未知名稱
D.書:精彩人生
8.下列關于運算符重載的描述中,錯誤的是( )。
A.::運算符不能重載
B.類型轉換運算符只能作為成員函數重載
C.將運算符作為非成員函數重載時必須定義為友元
D.重載口運算符應完成“下標訪問”操作
9.有如下程序:
#include
#includediomanip>
usingnamespacestd;
intmain( ){
ints[]={123,234);
cout
}
運行時的輸出結果是( )。
A.123
B.***123
234234
C.***123
D.***123
***234234***
10.有如下類定義:
classA{
char*a;
public:
A( ):a(O){}
A(char*aa){//把aa所指字符串拷貝到a所指向的存儲空間
a=__;
strcpy(a,aa);
}
~A( ){delete[]a;}
};
橫線處應填寫的表達式是( )。
A.Dewchar[strlen(aa)+1]
B.char[strlen(aa)+1]
C.char[strlen(aa)]
D.newchar[sizeof(aa)-1]
參考答案:
1.A。【解析】在C++中輸入用“cin>>”,輸出用“<32.C。【解析】析構函數主要用于最后函數的釋放空間。本題在已輸出t1.getCount()后才調用即不影響所輸結果。
3.B。【解析】const關鍵字可以用于參與對重載函數的區分。重載的原則是常對象調用常成員函數,一般對象調用一般成員函數。
4.D。【解析】對有參與無參構造函數的調用。當names[2]為空時調無參構造函數,而names[0],names[1]調用有參構造函數,即輸出3個“?”。
5.A。【解析】當基類的構造函數默認或無參時,派生類可省略對基類構造函數的顯示調用,但系統會自動調用該類的缺省構造函數,且先調用基類的構造函數后調用派生類的構造函數。
6.B。【解析】在基類與派生類中,析構函數在派生類先調用,而本題有兩個不同類對象,對于cb2需先調c2的析構函數,再調c1的析構函數。而對于*cb1由于沒有指針性析構函數,它將不參加傳遞數據。
7.D。【解析】因為getType是虛函數,所以P.getType()執行繼承類的getType函數,輸出“書”;P.getName()執行基類的getName函數,輸出“精彩人生”。總共輸出“書:精彩人生”,故選D。
8.C。【解析】除了·、*、→*、::、?:這五個運算符外,其他運算符都可以重載。=、[]、()、→以及所有的類型轉換運算符只能作為成員函數重載。口作為成員函數重載時,應完成“下標訪問”操作,使得向指定下標處的元素賦值或取值成為可能。
9.B。【解析】setw()為填充字符控制,僅對緊接著它的字符起作用,當輸出的字符寬度小于setw()預留的字符數時,需用setw()設置的字符給予填充。
10.A。【解析】對動態分配存儲空間的考查,在C++中,回車鍵需計一字符,即總的長度為strlen(aa)+1。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關推薦: