一、選擇題(每小題1分,共40分)
1有如下程式:
#include
using namespace std;
class Base{
protected:
Base(){cout<<’A’;}
Base(char C){cout<
};
class Derived:public Base{
public:
Derived(char C){tout<
};
int main(){
Derived dl(’B’);
retum 0;
}
執行這個程式的輸出結果是( )。
參考答案:C
參考解析:本題考查派生類的建構函式和解構函式.在定義一個派生類的物件時,先呼叫基類的建構函式,然後再執行派生類的建構函式;物件釋放時,先執行派生類的解構函式,再執行基類的解構函式。本題中定義了一個派生類物件d1,首先執行基類的建構函式,輸出A;然後執行派生類的建構函式,輸出B。所以答案為c。
2下列符號中能夠作為C++識別符號的是( )。
stB.2aC._t
參考答案:C
參考解析:本題考查c++識別符號的命名規則,其規則有如下幾點:①所有識別符號必須由字母、數字或下畫線組成,且必須由字母或下畫線開頭;②所有識別符號不能使用c++已有的關鍵字;③大、小寫字母表示不同意義,即代表不同的識別符號。選項A是關鍵字,選項B不能以數字開頭,選項D包含了字元”一”,且不能以此字元開頭。故答案為C。
3有如下程式:
#include
using namespace std;
class Base
{
private:
void funl()const{tout<<”funl”;}
protected:
void fun2()const{tout<<”fun2”;}
public:
void fun3()const{cout<<”fhll3”;}
};
class Derived:protected Base
{
public:
void fhn4()const{cout<<”filn4”;}
};
int main()
{
Derived obj;
();//①
2();//②
();//③
4();//④
return U:
}
其中有語法錯誤的語句是( )。
A.①②③④B.①②③C.②③④D.①④
參考答案:B
考解析:本題考查保護繼承中派生類對基類的訪問屬性,受保護繼承中,基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有,保護基類的所有成員在派生類中都被保護起來,在類外不能訪問,所以①②③錯誤。
4有如下程式:
#include
using namespace std;
class Instrument{
public:
virtual void Display()=0;
};
class Pian0:public Instrument}
public:
void Display(){/*函式體略*" >
};
intmain(){
Instrument S;
Instrument*P=0:
//…;
return 0;
}
下列敘述中正確的是( )。
A.語句“Insturment*P=0;”編譯時出錯
B.語句“Instnunent s;”編譯時出錯
C.類Pian0中的Display函式不是虛擬函式
D.類Instrument是一個虛基類
參考答案:B我
參考解析:本題考查純虛擬函式和抽象類,純虛擬函式是在宣告虛擬函式時被“初始化”為0的函式,包含純虛擬函式的類為抽象類,抽象類不能被例項化,所以語句“Instrmnent s;”在編譯時出錯。
5如下函式模板:
templateT square(T x){return x*x;} 其中T是( )。
A.函式形參B.函式實參C.模板形參D.模板實參
參考答案:C
參考解析:本題考查模板函式的基本概念,根據模板函式的定義,T是模板形參,所以答案為C。
6為了提高函式呼叫的實際執行速度,可以將較簡單的函式定義為( )。
A.行內函數B.過載函式C.遞迴函式D.函式模板
參考答案:A
參考解析:一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中.然後再返回到呼叫它的函式中;而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換,一般只將{將規模很小而使用頻繁的函式宣告為行內函數,可以避免函式呼叫時間開銷,從而提高執行速度。
7有如下程式:
#inClude using namespaCe std; Class Point{
publiC:
statiC int number;
publiC:
Point( )er++;} ~Point( ){number--;}
}; , int P0int::number=0;
int main( ){
Point *ptr:
Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’
}
Point C;
Cout<
return 0; }
執行這個程式的輸出結果是( )。
A.3B.4C.6D.7
參考答案:C
參考解析:本題考查預設建構函式.題目中定義.個物件A、B以及物件陣列Point[3],又定義了物件C,共執行6次建構函式,number變為了6,所以本題答案為C。
二、填空題(每空2分,共30分)
請將每空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。
注意:以命令關鍵字填空的必須拼寫完整。
1.資料管理技術發展過程經過人工管理、檔案系統和資料庫系統三個階段,其中資料獨立性最高的階段是 【1】 。
【答案】資料庫系統
2.軟體測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬於 【2】 測試。
【答案】黑盒
3.符合結構化原則的三種基本控制結構是:選擇結構、迴圈結構和 【3】 。
【答案】順序結構
4.一棵二叉樹第六層(根結點為第一層)的結點數最多為 【4】 個。
【答案】32
5.資料結構分為邏輯結構和儲存結構,迴圈佇列屬於 【5】 結構。
【答案】儲存
6.有如下程式段:
int x=1,Y=2,z=3;
x=x^z;
y=y^z;
z=x^y;
cout<執行這個程式段的輸出是 【6】 。
【答案】100
7.若要訪問指標變數p所指向的資料,應使用表示式 【7】 。
【答案】*P
8.已知一個函式的原型是:
int fn(double x);
若要以5.27為實參呼叫該函式,應使用表示式 【8】 。
【答案】fn(5.27)
9.通過使用new和delete兩個運算子進行的`分配為 【9】 儲存分配。
【答案】【9】動態
10.如果類B繼承了類A,則稱類A為類B的基類,類B稱為類A的 【10】 。
【答案】【10】派生類
11.將x+y中的+運算子用友元函式過載應寫為 【11】 。
【答案】【11】 operator+(x,y)
12.請將下列類定義補充完整。
class Base { public: void fun( ){ cout<<"Base::fun"<
class Derived : public Base {
public:
void fun( ) {
【12】 //顯式呼叫基類的fun函式
cout<<"Derived::fun"<}};
【答案】【12】Base::fun()
13.多數運算子既能作為類的成員函式過載,也能作為類的非成員函式過載,但[ ]運算子只能作為類的 【13】 函式過載。
【答案】【13】成員
14.表示式operator+(x,y)還可以表示為 【14】 。
【答案】【14】x+y
15.C++語言中的多型性分為編譯時的多型性和 【15】 時的多型性。
【答案】執行