常見(jiàn)筆試/面試題目(三) □daibaobao 發(fā)表于 2005-12-9 15:54:00
3.10 #define DOUBLE(x) x+x (Autodesk)
i = 5*DOUBLE(10); i 是多少?正確的聲明是什么?
答案:i 為60。正確的聲明是#define DOUBLE(x) (x+x)
3.11 有哪幾種情況只能用intialization list 而不能用assignment? (Autodesk)
答案:當(dāng)類中含有const、reference 成員變量;基類的構(gòu)造函數(shù)都需要參數(shù);類中含有其他類的成員對(duì)象,而該類的構(gòu)造函數(shù)都需要參數(shù)。
3.11 C++是不是類型安全的? (Autodesk)
答案:不是。兩個(gè)不同類型的指針之間可以強(qiáng)制轉(zhuǎn)換。C#是類型安全的。
3.12 main 函數(shù)執(zhí)行以前,還會(huì)執(zhí)行什么代碼? (Autodesk)
答案:全局對(duì)象的構(gòu)造函數(shù)會(huì)在main 函數(shù)之前執(zhí)行。
3.13 描述內(nèi)存分配方式以及它們的區(qū)別。 (Autodesk , Microsoft)
答案:1) 從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量,static 變量。
(2) 在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。
(3) 從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc 或new 申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free 或delete 釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問(wèn)題也最多。
3.14 什么是虛擬存儲(chǔ)器?virtual memory 怎樣映射到physical memory?頁(yè)面替換算法有哪些? (Microsoft)
見(jiàn)操作系統(tǒng) p238 頁(yè)。掌握的頁(yè)面替換算法NRU,F(xiàn)IFO,第二次機(jī)會(huì)頁(yè)面替換算法,LRU
3.15 有四個(gè)同樣的容器,里面裝滿了粒數(shù)相同的藥丸,正常藥丸的質(zhì)量為m,變質(zhì)藥丸的質(zhì)量為m+1,現(xiàn)在已知這四個(gè)容器中,有一個(gè)裝的全是變質(zhì)藥丸,用電子秤只稱一次,找出哪個(gè)容器裝的是變質(zhì)藥丸 (Microsoft)
答案:把四個(gè)容器依次編號(hào)為1、2、3、4,然后從中分別取出1、2、3、4 粒藥丸,稱這10 粒藥丸的質(zhì)量,如果質(zhì)量為10m+1,則說(shuō)明第一個(gè)容器裝的是變質(zhì)藥丸,如果為10m+2 則說(shuō)明第二個(gè)裝的變質(zhì)藥丸,依次類推。
3.16 比較一下C++中static_cast 和 dynamic_cast 的區(qū)別。 (Autodesk)
dynamic_casts在幫助你瀏覽繼承層次上是有限制的。它不能被用于缺乏虛函數(shù)的類型上,它被用于安全地沿著類的繼承關(guān)系向下進(jìn)行類型轉(zhuǎn)換。如你想在沒(méi)有繼承關(guān)系的類型中進(jìn)行轉(zhuǎn)換,你可能想到static_cast
3.17 Struct 和class 的區(qū)別 (Autodesk)
答案:struct 中成員變量和成員函數(shù)默認(rèn)訪問(wèn)權(quán)限是public,class 是private
3.18 當(dāng)一個(gè)類A 中沒(méi)有生命任何成員變量與成員函數(shù),這時(shí)sizeof(A)的值是多少,如果不是零,請(qǐng)解釋一下編譯器為什么沒(méi)有讓它為零。(Autodesk)
答案:肯定不是零。我舉個(gè)反例,如果是零的話,聲明一個(gè)class A[10]對(duì)象數(shù)組,而每一個(gè)對(duì)象占用的空間是零,這時(shí)就沒(méi)辦法區(qū)分A[0],A[1]…了
3.19 在8086 匯編下,邏輯地址和物理地址是怎樣轉(zhuǎn)換的?(Intel)
答案:通用寄存器給出的地址,是段內(nèi)偏移地址,相應(yīng)段寄存器地址*10H+通用寄存器內(nèi)陸址,就得到了真正要訪問(wèn)的地址。
3.20 描述一下C++的多態(tài) (microsoft)
答案:C++的多態(tài)表現(xiàn)在兩個(gè)部分,一個(gè)是靜態(tài)連編下的函數(shù)重載,運(yùn)算符重載;動(dòng)態(tài)連編下的虛函數(shù)、純虛函數(shù)(抽象類)