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