61-70
注:以下問(wèn)題的部分解析并非全部是自己原創(chuàng),只是為了便于以后復(fù)習(xí),直接粘貼總結(jié)的答案,主要來(lái)源是七月在線中的解析部分。https://www.julyedu.com/question/selectAnalyze/kp_id/4/cate/C
1、下列關(guān)于一個(gè)類的靜態(tài)成員的描述中,不正確的是( )
A 該類的對(duì)象共享其靜態(tài)成員變量的值
B 靜態(tài)成員變量可被該類的所有方法訪問(wèn)
C 該類的靜態(tài)方法只能訪問(wèn)該類的靜態(tài)成員變量
D 該類的靜態(tài)數(shù)據(jù)成員變量的值不可修改
解釋:選D
用static關(guān)鍵字修飾的數(shù)據(jù)成員為靜態(tài)成員。
普通成員每一個(gè)對(duì)象都回創(chuàng)建一個(gè),但靜態(tài)成員是被同類的所有對(duì)象共享,可以被類的所有方法訪問(wèn)。
靜態(tài)方法只能訪問(wèn)靜態(tài)方法和靜態(tài)成員,不能訪問(wèn)任何非靜態(tài)方法和和非靜態(tài)成員。
若靜態(tài)成員變量沒(méi)有被const修飾,則其值是可以修改的。
補(bǔ)充:靜態(tài)成員只能在類外進(jìn)行初始化,只有靜態(tài)常量整型數(shù)據(jù)成員才能在類中初始化。
普通成員只有在創(chuàng)建了對(duì)象之后才可以存在,但靜態(tài)成員只要?jiǎng)?chuàng)建了類,便存在了。
普通成員的調(diào)用方法為對(duì)象名.成員名,靜態(tài)成員還可以直接用類名作用域的方法調(diào)用
類名::成員名
2、C++將父類的析構(gòu)函數(shù)定義為虛函數(shù),下列正確的是哪個(gè)( )
A 釋放父類指針時(shí)能正確釋放子類對(duì)象
B 釋放子類指針時(shí)能正確釋放父類對(duì)象
C 這樣做是錯(cuò)誤的
D 以上全錯(cuò)
解釋:選A
當(dāng)創(chuàng)建一個(gè)父類的指針調(diào)用子類的對(duì)象時(shí)(CFather *fa = new CSon),若父類的析構(gòu)函數(shù)不是虛函數(shù)時(shí),釋放父類指針時(shí)只會(huì)調(diào)用父類的析構(gòu)函數(shù);若父類的析構(gòu)函數(shù)是虛函數(shù)時(shí),將會(huì)先調(diào)用子類的析構(gòu)函數(shù),在調(diào)用父類的析構(gòu)函數(shù)。
3、以下關(guān)于STL的描述中,( )是錯(cuò)的。
A STL容器是線程安全的
B 當(dāng)容量不夠時(shí),vector內(nèi)部?jī)?nèi)存擴(kuò)展方式是翻倍
C std::sort可以是不穩(wěn)定排序
D std::string中可以存儲(chǔ)多個(gè)’\0’字符
E std::bitset是一個(gè)存儲(chǔ)bit的STL容器
F std::stack默認(rèn)是用deque實(shí)現(xiàn)的
解釋:選A
STL容器沒(méi)有規(guī)定一定是線程安全,所以如果是多個(gè)寫操作,使用時(shí)需要由程序員加鎖來(lái)保證一致性。
容量不夠是,一種vector的實(shí)現(xiàn)方案的確是翻倍,當(dāng)然也有擴(kuò)大為原來(lái)的1.5倍等其他方案。std::sort的一種實(shí)現(xiàn)方案是當(dāng)數(shù)據(jù)量大時(shí),使用快速排序;如果數(shù)量中等,使用堆排序;如果少量數(shù)據(jù),則使用插入排序;因此,它不是穩(wěn)定的排序方案。
std::string有長(zhǎng)度字段,不以’\0’字符作為結(jié)束標(biāo)志。
std::bitset是記錄0、1標(biāo)志的容器,但需要初始化時(shí)指定長(zhǎng)度,功能上類似壓縮的0/1數(shù)組。
deque是雙向隊(duì)列,一般是分塊連續(xù)的;在實(shí)現(xiàn)時(shí),往往使用deque來(lái)實(shí)現(xiàn)堆棧std::stack。
4、程序出錯(cuò)在什么階段( )
#include < iostream >
using namespace std;
int main(int argc,char**argv)
{
http://www.sougou.com
cout<< “welcome to sogou”<< endl;
return 0;
}
A 編譯階段出錯(cuò)
B 運(yùn)行階段出錯(cuò)
C 編譯和運(yùn)行都出錯(cuò)
D 程序運(yùn)行正常
解釋:選D
本題中的網(wǎng)址比較迷惑人,在C++中,單行注釋以雙斜杠(//)開(kāi)頭,即"www.sougou.com"是注釋內(nèi)容。
而前面http是標(biāo)簽,標(biāo)簽命名規(guī)則和變量相同,后面跟一個(gè)冒號(hào)(:),標(biāo)簽提供了表示特定語(yǔ)句的方式,使用goto label(label表示標(biāo)簽名)可以無(wú)條件跳轉(zhuǎn)到該語(yǔ)句。
5、下面程序執(zhí)行結(jié)果為【說(shuō)明:x86_64環(huán)境】( )
int a[4][4] =
{
{ 1, 2, 3, 4 },
{ 50, 60, 70, 80 },
{ 900, 1000, 1100, 1200 },
{ 13000, 14000, 15000, 16000 }
};
int (*p1)[4] = a;
int (*p2)[4] = &a[0];
int *p3 = &a[0][0];
printf(“%d, %d, %d, %d\n”,
* ( *(a + 1) - 1),
* ( * (p1 + 3) - 2) + 1,
* ( *(p2 - 1) + 16) + 2,
* (p3 + sizeof(p1)-3));
A 16000,1101,13002,2
B 4,2,3,60
C 16000,2,3,2
D 4,1101,13002,60
解釋:選D
a+1指向第二行 * (a+1)指向第二行第一列,( * (a + 1) - 1)指向第一行最后一列,故* ( * (a + 1) - 1)為4;
指針p1是一個(gè)指向含有4個(gè)元素的數(shù)組的指針,即數(shù)組指針。當(dāng)p1與整數(shù)加減時(shí),以4個(gè)整型值長(zhǎng)度為單位進(jìn)行調(diào)整, p1+3指向第四行, * (p1+3)指向第四行第一列,* (p1+3)-2 將指向第三行倒數(shù)第二列,故* ( * (p1 + 3) - 2) + 1為1101;
指針p2和指針p1類型相同,初始值也都是數(shù)組a的首地址,分析同p2;
指針p3是指向單個(gè)整型元素的指針,與整數(shù)加減時(shí)以1個(gè)整型值長(zhǎng)度為單位來(lái)調(diào)整, 對(duì)于第4個(gè)輸出值,指針p1的大小在x86_64環(huán)境下為8個(gè)字節(jié),* (p3 + 8 – 3)結(jié)果為60。
在不同的系統(tǒng)環(huán)境中,指針類型:32位系統(tǒng)4字節(jié),64位系統(tǒng)8字節(jié)。
6、void func()
{
char b[2] = {0};
strcpy(b,“aaaa”);
}
以下說(shuō)法哪個(gè)正確( )
A Debug版崩潰,Release版正常
B Debug版正常,Release版崩潰
C Debug版崩潰,Release版崩潰
D Debug版正常,Release版正常
解釋:選A
func函數(shù)中,申請(qǐng)了2個(gè)char大小的內(nèi)存空間,而實(shí)際寫入的數(shù)據(jù)超出申請(qǐng)空間,執(zhí)行strcpy函數(shù)雖然將數(shù)據(jù)寫入但是破壞了后續(xù)的空間,在函數(shù)返回前收回申請(qǐng)空間時(shí)發(fā)現(xiàn)內(nèi)存訪問(wèn)越界。由于Debug版中,存在相應(yīng)的保護(hù)機(jī)制檢查是否內(nèi)存訪問(wèn)越界,而Release版則不會(huì)進(jìn)行相應(yīng)的檢查,故前者崩潰,后者正常。
7、在x86_64環(huán)境下,int(*b)[10][10]; sizeof(b)=( )
A 8
B 40
C 80
D 400
E 800
解釋:選A
b為一個(gè)指向二維數(shù)組的指針,即數(shù)組指針,故其大小為指針的大小,在該環(huán)境下為8。
8、在面向?qū)ο筌浖_(kāi)發(fā)中,封裝是一種( )技術(shù),其目的是使對(duì)象的使用者和生產(chǎn)者分離。
A 接口管理
B 信息隱藏
C 多態(tài)
D 聚合
解釋:選B
9、聲明一個(gè)指向含有10個(gè)元素的數(shù)組的指針,其中每個(gè)元素是一個(gè)函數(shù)指針,該函數(shù)的返回值是int,參數(shù)是int*,正確的是( )
A (int * p[10])(int*);
B int [10]* p(int*);
C int (* (* p)[10])(int*);
D int ((int*)[10])*p;
解釋:選C
首先區(qū)分一下數(shù)組指針和指針數(shù)組。int (* p)[10]是一個(gè)數(shù)組指針,p是一個(gè)指針指向 int[10]數(shù)組, int* p[10]是一個(gè)指針數(shù)組,p是一個(gè)數(shù)組,數(shù)組每個(gè)元素是個(gè)指向int型的指針。
一個(gè)指向含有10個(gè)元素的數(shù)組的指針就是(* p)[10]。返回值是int,參數(shù)是int* 的函數(shù)指針的定義為int ( * pf)(int * ) ,然后把( * p)[10]作為一個(gè)整體替代 pf,即int( * ( * p)[10]))(int * )。
對(duì)于復(fù)雜指針的解析,有一個(gè)“右左法則”。對(duì)于C選項(xiàng)中的int ( * ( * p)[10])(int*),可以進(jìn)行如下解析:首先找到那個(gè)未定義的標(biāo)識(shí)符,就是p,它的外面是圓括號(hào),左邊是*,說(shuō)明p是一個(gè)指針,然后(* p)右面是[],所以是數(shù)組指針, * p指向一個(gè)int[10]數(shù)組。再看左邊,是個(gè) * 號(hào),表明數(shù)組的每個(gè)元素為一個(gè)指針。出括號(hào)再看右側(cè)是(int * ),說(shuō)明這是一個(gè)函數(shù)指針,所以這個(gè)數(shù)組中每個(gè)元素是函數(shù)指針,該函數(shù)的參數(shù)是int*,返回值是int
10、下面描述中,正確的是( )
A 基類定義的public成員在公有繼承的派生類中可見(jiàn),也能在類外被訪問(wèn)
B 基類定義的public和protected成員在私有繼承的派生類中可見(jiàn),在類外可以被訪問(wèn)
C 基類定義的public和protected成員在保護(hù)繼承的派生類中不可見(jiàn)
D 基類定義的protected成員在保護(hù)繼承的派生類中可見(jiàn),也能在類外被訪問(wèn)
解釋:選A
總結(jié)
- 上一篇: 《论文阅读》CEM: Commonsen
- 下一篇: 学习蓝牙的炸鸡