21關(guān)于在調(diào)用模板函數(shù)時(shí)模板實(shí)參的使用,下列表述中正確的是( )。
A.對(duì)于虛擬類型參數(shù)所對(duì)應(yīng)的模板實(shí)參,如果能從模板函數(shù)的實(shí)參中獲得相同的信息,則都可以省略
B.對(duì)于虛擬類型參數(shù)所對(duì)應(yīng)的模板實(shí)參,如果它們是參數(shù)表中的最后的若干個(gè)參數(shù),則都可以省略
C.對(duì)于虛擬類型參數(shù)所對(duì)應(yīng)的模板實(shí)參,若能夠省略則必須省略
D.對(duì)于常規(guī)參數(shù)所對(duì)應(yīng)的模板實(shí)參,任何情況下都不能省略
參考答案:D
參考解析:在調(diào)用一個(gè)模板函數(shù)時(shí),編譯系統(tǒng)需要足夠的信息來判別每個(gè)虛擬類型參數(shù)所對(duì)應(yīng)的實(shí)際類型,可以從兩個(gè)不同的渠道獲得這樣的信息:從模板實(shí)參表(用“<>”括起來的參數(shù)表)或從模板函數(shù)實(shí)參表(用“()”括起來的參數(shù)表)。如果從后者獲得的信息已經(jīng)能夠判定其中部分或全部虛擬類型參數(shù)所對(duì)應(yīng)的實(shí)際參數(shù),而且它們又正好是參數(shù)表中最后的若干參數(shù),則模板實(shí)參表中的那幾個(gè)參數(shù)可以省。如果模板實(shí)參表中的實(shí)參都被省了,則空表“<>”也可以不要,因此選項(xiàng)D錯(cuò)誤。反之,對(duì)于某個(gè)模板實(shí)參,如果從模板函數(shù)的實(shí)參表中無法獲得同樣的信息,就不能省;或者雖然能夠獲得同樣的信息,但在它后面還有其他不能省的實(shí)參,則其自身還是不能省。
22有如下程序段:
int i=0,J=1;
int&r=i;//①
r=j;//②
int*P=&i;//⑧
*P=&r;//④
其中會(huì)產(chǎn)生編譯錯(cuò)誤的語句是( )。
A.④B.③C.②D.①
參考答案:A
參考解析:本題考查指針和引用。①為引用,使用正確;④中&r表示一一個(gè)地址,而* P已經(jīng)是一個(gè)值了,不能將一個(gè)指針賦值給一個(gè)值,所以編譯錯(cuò)誤。
23有如下程序:
#include
using namespace std;
class Obj{
static int i;
public:
Obj(){i++;}
一Obj(){i一一;}
static int getVal(){return i;}
};
int Obj::i=0:
void f(){Obj ob2;cout<
int main(){
Obj obl;
f();
Obj}ob3=new Obj;cout
delete ob3;cout<
return 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
A.232B.231C.222D.221
參考答案:D
參考解析:本題考查構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序,調(diào)用順序?yàn)橄葮?gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)。本題中先定義了一個(gè)對(duì)象ob1,會(huì)執(zhí)行構(gòu)造函數(shù),那么i就變?yōu)榱薼;再執(zhí)行函數(shù)f后,由于又定義了一個(gè)對(duì)象ob2,所以再次執(zhí)行構(gòu)造函數(shù),i就變?yōu)榱?,輸出了2。函數(shù)執(zhí)行完后執(zhí)行析構(gòu)函數(shù),i變?yōu)榱?,然后又定義了對(duì)象指針,i變?yōu)榱?。釋放ob3后,i變?yōu)榱?,所以答案為D。
24有如下類定義:
class MyBase{
int k;
public:
MyBase(int n=O):k(n)}}
int value()eonst{return k;}
};
class MyDerived:MyBase{
intj;
public:
MyDerived(int i):j(i)}}
int getK()const{return k;}
int getJ()const{return j;}
};
編譯時(shí)發(fā)現(xiàn)有一處語法錯(cuò)誤,對(duì)這個(gè)錯(cuò)誤最準(zhǔn)確的描述是( )。
A.函數(shù)9etK試圖訪問基類的私有成員變量k
B.在類MyDerived的定義中,基類名MyBase前缺少關(guān)鍵字public、protected或private
C.類MyDerived缺少一個(gè)無參的構(gòu)造函數(shù)
D.類MyDerived的構(gòu)造函數(shù)沒有對(duì)基類數(shù)據(jù)成員k進(jìn)行初始化
參考答案:A
參考解析:默認(rèn)繼承方式為私有繼承,私有繼承將基類的公用成員和保護(hù)成員都變?yōu)閞私有成員,基類的私有成員依然屬于基類私有,派生類不能訪問基類的私有成員。所以A選項(xiàng)正確。
25下列關(guān)于虛基類的描述,錯(cuò)誤的是( )。
A.設(shè)置虛基類的目的是為了消除二義性
B.虛基類的構(gòu)造函數(shù)在非虛基類之后調(diào)用
C.若同一層中包含多個(gè)虛基類,這些虛基類的構(gòu)造函數(shù)按它們說明的次序調(diào)用
D.若虛基類由非虛基類派生而來,則仍然先調(diào)用基類構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)
參考答案:B
參考解析:虛基類的引入就是為j-消除。二義性,其構(gòu)造函數(shù)的調(diào)用仍然是按照繼承的順序進(jìn)行的,對(duì)于多個(gè)虛基類則按它們說明的次序調(diào)用,虛基類的構(gòu)造函數(shù)先于非虛基類的構(gòu)造函數(shù)執(zhí)行。
26在長度為n的有序線性表中進(jìn)行二分查找,最壞情況下需要比較的次數(shù)是( )。
A.O(n)B.O(n2)C.O(1092n)D.0(n1092n)
參考答案:C
參考解析:當(dāng)有序線性表為順序存儲(chǔ)時(shí)才能用:二分法查找。可以證明的是對(duì)于長度為n的有序線性表,在最壞情況下,二分法查找只需要比較l092n次,而順序查找需要比較n次。
27在軟件開發(fā)中,需求分析階段可以使用的工具是( )。
A.N—s圖B.DFD圖C.PAD圖D.程序流程圖
參考答案:B
參考解析:在需求分析階段可以使用的工具有數(shù)據(jù)流圖DFD圖,數(shù)據(jù)字典DD,判定樹與判定表,所以選擇B。
28有如下類聲明:
class Base{
protected:
int amount;
public:
Base(int n=0):amount(n){}
int getAmount()const{retum amount;}
};
class Derived:public Base{
protected:
int value;
public:
Derived(int m,int n):value(m),Base(n){}
int getData()const{return value+amount;}
}:
已知x是一個(gè)Derived對(duì)象,則下列表達(dá)式中正確的是( )。
A.x.value+X.getAmount()B.x.getData()一x.getAmount()C.x.getData()一x.amountD.x.value+X.amount
參考答案:B
參考解析:本題考查公有繼承中派生類對(duì)象對(duì)基類的訪問屬性。在公有繼承中,派生類對(duì)象只能訪問基類的公有成員,而不能}方問基類的保護(hù)成員和私有成員。題中x是派生類的對(duì)象,只能訪問基類中公有的Base()和getAmount()成員,而不能訪問保護(hù)類型的amount成員,故選項(xiàng)C、D錯(cuò)誤。而類對(duì)象對(duì)類成員的訪問也存在類似的情況,即類對(duì)象只能訪問類的公有成員,而value是Derived的保護(hù)成員,所以A選項(xiàng)也錯(cuò)誤。故答案為B。
30下面描述中,不屬于軟件危機(jī)表現(xiàn)的是( )。
A.軟件過程不規(guī)范B.軟件開發(fā)生產(chǎn)率低C.軟件質(zhì)量難以控制D.軟件成本不斷提高
參考答案:A
參考解析:軟件危機(jī)主要表現(xiàn)在:軟件需求的增長得不到滿足;軟件開發(fā)成本和進(jìn)度無法控制;軟件質(zhì)撼難以保證;軟件不可維護(hù)或維護(hù)程度非常低;軟件的成本不斷提高;軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和應(yīng)用需求的增長。所以選擇A。
|
|
||
|
|