1下列有關行內函數的敘述中,正確的是( )。
A.行內函數在呼叫時發生控制轉移
B.行內函數必須通過關鍵字inline來定義
C.行內函數是通過編譯器來實現的
D.行內函數函式體的最後一條語句必須是return語句
參考答案:C
參考解析:一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中;而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換,所以在呼叫時不發生控制轉移。在類內部實現的函式都是行內函數,可以不用inline定義;只有函式外部定義的行內函數才必須加關鍵字inline。編譯系統並非對行內函數必須使用內聯,而且根據具體情況決定。行內函數不是必須要有返回值的。
2語句int*P=&k;定義了指標P,與這個語句等效的語句序列是( )。
* p;P=&k; * P;P=k; * p;* P=&k; * p;* P=k;
參考答案:A
參考解析:本題考查指標和地址,題目中定義了一個指向變數k的一個指標p,那麼與題目中等效的表示式A選項,即先定義一個指向整型的指標,然後指向k的地址。
3有如下程式:
#include
using namespace std;
class A
{
public:
A(){cout<<”A”;}
-A(){cout<<”-A”;}
};
class B:public A
{
A*P;
public:
B(){cout<<”B”;P=new A();}
-B(){cout<<”~B”;delete p;}
};
int main()
{
B obj;
return 0;
}
執行這個程式的輸出結果是( )。
~A~B~~B~A~~B~A~~A~B~A
參考答案:B
參考解析:本題考查派生類的建構函式和解構函式,在定義一個派生類的物件時,先呼叫基類的建構函式,然後再執行派生類的建構函式。物件釋放時,先執行派生類的解構函式,再執行基類的解構函式。所以本題答案為B。
4有如下類定義:
class AA
{
im a:
public:
int getRef()const{return&a;}//①
int getValue()const{return a;}//②
void set(int n)const{a=n;}//③
friend void show(AA t{cout<
};
其中四個函式的定義中正確的是( )。
A.①B.②C.③D.④
參考答案:B
參考解析:本題考查常成員函式,常成員函式只能引用本類中的資料成員,而不能修改它。所以本題答案為B。
5若要對Data類中過載的加法運算子成員函式進行宣告,下列選項中正確的是( )。
+(DatA.; operator+(DatA.;+operator(DatA.;ator+(Data,DatA.;
參考答案:B
參考解析:根據過載加法運算子的格式,只有B選項正確。
6有如下陣列宣告:int num[10];,下標值引用錯誤的是( )。
[10][5][3][o]
參考答案:A
參考解析:陣列定義中的數字指的是陣列的大小,而下標是從0開始的,所以本題中陣列的最後一個元素是num[9]。
7將字首運算子“--”過載為非成員函式,下列原型中能正確用於類中說明的是( )。
&operator--(int); operator--(DeCr&,int);nd DeCr&operator--(DeCr&);nd DeCr operator--(DeCr&,int);
參考答案:C
參考解析:把“--”運算子過載為非成員(友元)函式格式:friend<返回型別>operator--()是字首的格式;friend<返回型別>operator--(int)是字尾的格式。當然也可以有引數如題中C選項所示。
8如果派生類以proteCted方式繼承基類,則原基類的`proteCted成員和publiC成員在派生類中的訪問屬性分別是( )。
iC和iC和eCted和eCted和proteCted
參考答案:D
參考解析:本題考查保護繼承中派生類對基類的訪問屬性,在受保護繼承中,基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有,所以本題答案為D。
9在函式中,可以用aut0、extem、register和static這四個關鍵字中的一個來說明變數的儲存型別,如果不說明儲存型別,則預設的儲存型別是( )。
ic
參考答案:A
參考解析:變數的儲存方法分為靜態儲存和動態儲存兩大類,包含4種:自動的(auto)、靜態的(static)、暫存器的(register)、外部的(extem)。變數如果沒有說明儲存型別,那麼預設就是aut0。
10下列程式的輸出結果是( )。
#include
int rain(iltl a,int B)
{
if(a
else retum b;
retum 0;
}
void main()
{
eout<
}
A.0B.1C.2D.3
參考答案:B
參考解析:本題考查的是函式的呼叫,第一次呼叫min(2,3),因為2<3,所以返回值為2,第二次呼叫min(1,2),因為l<2,所以返回1。
11在黑盒測試方法中,設計測試用例的主要根據是( )。
A.程式內部邏輯B.程式外部功能C.程式資料結構D.程式流程圖
參考答案:B
參考解析:黑盒測試是對軟體已經實現的功能是否滿足需求進行測試和驗證,黑盒測試完全不考慮程式內部的邏輯結構和內部特性,只根據程式的需求和功能規格說明,檢查程式的功能是否符合它的功能說明,所以本題選擇B。
12在面向物件方法中,不屬於“物件”基本特點的是( )。
A.一致性B.分類性C.多型性D.標識唯一性
參考答案:A
參考解析:物件有如下一些基本特點:標識唯一性、分類性、多型性、封裝性、模組獨立性好。所以選擇A。
13有以下程式:
#include
void fun(int a,int b,int C.
{ a=456,b=567,c=678;}
void main()
{
int X=10,Y=20,Z=30;
fun(X,Y,z);
aout<
}
輸出結果是( )。
A.30,20,10B.10,20,30C.456,567,678D.678,567,456
參考答案:B
參考解析:本題考查函式中變數的作用範圍,在主函式中給變餐x、Y、Z賦值,然後將其作為實參傳遞給了函式fun(),雖然在函式fun()中改變了這3個變數的值,但只是同名的區域性變數,不影響函式中變數的值,所以在呼叫函式fun()結束後,主函式3個變數的值未改變。
14對類的建構函式和解構函式描述正確的是( )。
A.建構函式可以過載,解構函式不能過載
B.建構函式不能過載,解構函式可以過載
C.建構函式可以過載,解構函式也可以過載
D.建構函式不能過載,解構函式也不能重裁
參考答案:A
參考解析:一個類中只能定義一個解構函式,否則會造成對同…物件的多次刪除;而建構函式可以根據不同的引數個數和型別進行多次過載。
15通過運算子過載,可以改變運算子原有的( )。
A.運算元型別B.運算元個數C.優先順序D.結合性
參考答案:A
參考解析:過載運算子的規則如下:①c++不允許使用者自己定義新的運算子,只能對已有的C++運算子進行過載;②C++不能過載的運算子只有5個;③過載不能改變運算子運算物件的個數;④過載不能改變運算子的優先順序和結合性;⑤過載運算子的函式不能有預設的引數;⑥過載的運算子必須和使用者定義的自定義型別的物件一起使用,至少應有一個是類物件,即不允許引數全部是c++的標準型別。故本題答案為A。
16下列關於c++流的描述中,錯誤的是( )。
>>’A’表示式可輸出字元A
()函式可以檢測是否到達檔案尾
C.對磁碟檔案進行流操作時,必須包含標頭檔案fstream
D.以ios_base::0ut模式開啟的檔案不存在時,將自動建立一個新檔案
參考答案:A
參考解析:本題考查c++流,想要輸出字元“A”,則應該是cout<<“A”,所以本題答案為A。
17耦合性和內聚性是對模組獨立性度量的兩個標準。下列敘述中正確的是( )。
A.提高耦合性降低內聚性有利於提高模組的獨立性
B.降低耦合性提高內聚性有利於提高模組的獨立性
C.耦合性是指一個模組內部各個元素間彼此結合的緊密程度
D.內聚性是指模組間互相連線的緊密程度
參考答案:B
參考解析:模組獨立性是指每個模組只完成系統要求的獨立的子功能,並且與其他模組的聯絡最少且介面簡單。一般較優秀的軟體設計,應儘量做到高內聚、低耦合,即減弱模組之間的耦合性和提高模組內的內聚性,有利於提高模組的獨立性,所以A錯誤,B正確。耦合性是模組間互相連線的緊密程度的度量而內聚性是指一個模組內部各個元素間彼此結合的緊密程度,所以C與D錯誤。
18若有如下類宣告:
Class MyClass{ publiC:
MyClass( ){Cout<<1;} };
執行下列語句
MyClass a,b[2],*p[2]; 程式的輸出結果是( )。
A.11B.111C.1111D.11111
參考答案:B
參考解析:本題考查預設建構函式和帶引數的建構函式,題目中定義一一個物件a以及物件陣列b[2],共執行3次建構函式,物件指標不呼叫建構函式。所以本題答案為B。
19下列函式模板的定義中,合法的是( )。
lateT abs(T X){return x<07-x:X;}
late ClassT abs(T x){return x<07-X:x;}
late Tabs(T X){return x<07-x:X;}
late T abs(T x){return X<0?-X:x;}
參考答案:A
參考解析:本題考查模板函式的基本概念.根據模板函式的定義,所以答案為A。
20有如下程式:
#include
using namespace std;
class Base{
int x:
public:
Base(int n=0):x(n){cout<
int getX()const{return x;}
};
cjass Derived:public Base{
int Y:.
J;;Iublic:
Derived(int m,int n):y(m),Base(n){cout<
Derived(int m):Y(m){cout<
};
int main()
{
Derived dl(3),d2(5,7);
retum 0;
}
執行這個程式的輸出結果是( )。
A.375B.357C.0375D.0557
參考答案:C
參考解析:本題考查派生類的建構函式和解構函式,在定義一個派生類的物件時,先呼叫基類的建構函式,然後再執行派生類的建構函式,物件釋放時,先執行派生類的解構函式。再執行基類的解構函式。本題中定義了一個物件d1,先執行基類的建構函式輸出0,再執行派生類的建構函式輸出3,然後定義了一個物件d2(5,7),其中需要呼叫基類的建構函式輸出7.最後輸出5,所以答案為c。