C/C++面試題集錦(一)
C/C++面試題集錦(一)
- 在類(lèi)的頭文件中進(jìn)行聲明然后在定義文件中實(shí)現(xiàn)有什么意義?
- 一方面使類(lèi)的實(shí)現(xiàn)只編譯一次,提高編譯效率;另一方面可以實(shí)現(xiàn)類(lèi)的接口和實(shí)現(xiàn)的分離,利于維護(hù)
- 在類(lèi)的聲明內(nèi)部實(shí)現(xiàn)成員函數(shù)的函數(shù)體
- 這種成員函數(shù)自動(dòng)成為內(nèi)聯(lián)函數(shù),這種函數(shù)在編譯階段只要是用到的地方都會(huì)進(jìn)行代碼替換
- 成員函數(shù)通過(guò)什么來(lái)區(qū)分不同的對(duì)象
- 通過(guò)普通成員函數(shù)隱含的this指針來(lái)區(qū)分不同對(duì)象。一個(gè)類(lèi)的不同對(duì)象之間代碼是共享的,只有數(shù)據(jù)是不同的,this指針指向這些不同的數(shù)據(jù)內(nèi)存位置的首地址。
- 拷貝構(gòu)造函數(shù)的使用情形
- a.在使用對(duì)象去初始化同類(lèi)的另一個(gè)對(duì)象時(shí) b.函數(shù)調(diào)用時(shí)使用類(lèi)對(duì)象作為形參時(shí) c.函數(shù)返回值返回一個(gè)類(lèi)對(duì)象時(shí)
- 什么時(shí)候必須重寫(xiě)拷貝構(gòu)造函數(shù)
- 當(dāng)類(lèi)的成員需要對(duì)指針進(jìn)行深拷貝時(shí),需要在用到的構(gòu)造函數(shù)內(nèi)進(jìn)行動(dòng)態(tài)內(nèi)存分配,相應(yīng)的要在析構(gòu)函數(shù)內(nèi)進(jìn)行動(dòng)態(tài)內(nèi)存釋放
- 構(gòu)造函數(shù)調(diào)用的順序
- a.調(diào)用基類(lèi)的構(gòu)造函數(shù) b.按聲明中的順序?qū)︻?lèi)的數(shù)據(jù)成員進(jìn)行初始化 c.調(diào)用本類(lèi)自己的構(gòu)造函數(shù)
- 什么情況下必須用到初始化成員列表
- a. 類(lèi)的成員具有一經(jīng)初始化便不能修改的特性如常屬性和引用 b. 類(lèi)的成員是另一個(gè)類(lèi),且這個(gè)類(lèi)沒(méi)有默認(rèn)的構(gòu)造函數(shù)(即需要傳參數(shù))
- 類(lèi)的靜態(tài)成員函數(shù)存在的意義
- 相比普通成員函數(shù)不需要生成對(duì)象、沒(méi)有this指針的開(kāi)銷(xiāo),效率稍高;為無(wú)需實(shí)例化的函數(shù)提供了一種貼切的實(shí)現(xiàn)方式。
- 在類(lèi)外有什么辦法訪問(wèn)類(lèi)的非共有成員
- 友元、繼承和公有成員函數(shù)
- 抽象類(lèi)
- 不能用來(lái)建立對(duì)象只能用作繼承的基類(lèi),具體的是成員函數(shù)至少有一個(gè)是純虛函數(shù)(聲明中=0,而不管這個(gè)函數(shù)是否有實(shí)現(xiàn)代碼)
- 運(yùn)算符重載的意義
- 為自定義的數(shù)據(jù)類(lèi)型提供與語(yǔ)言內(nèi)置的類(lèi)型提供一致的數(shù)據(jù)操作接口
- 不允許重載的5個(gè)運(yùn)算符
- .*、::、sizeof、?:、.
- 流運(yùn)算符為什么不能通過(guò)成員函數(shù)重載?一般怎么解決
- 在類(lèi)內(nèi)對(duì)運(yùn)算符進(jìn)行重載要求運(yùn)算符的第一個(gè)操作數(shù)必須是本類(lèi)的對(duì)象,因?yàn)榱鲗?duì)象屬于標(biāo)準(zhǔn)庫(kù)的類(lèi),無(wú)法實(shí)現(xiàn)在標(biāo)準(zhǔn)庫(kù)中對(duì)各種自定義的類(lèi)的流操作進(jìn)行重載。一般通過(guò)自定義類(lèi)的友元函數(shù)來(lái)實(shí)現(xiàn)類(lèi)流操作符的重載
- 賦值運(yùn)算符和拷貝構(gòu)造函數(shù)有什么區(qū)別和聯(lián)系
- 他們都是通過(guò)類(lèi)的一個(gè)對(duì)象來(lái)建立起類(lèi)的另一個(gè)對(duì)象,但拷貝構(gòu)造函數(shù)涉及到對(duì)象的構(gòu)造,賦值運(yùn)算符不需要建立對(duì)象
- 什么情況下調(diào)用類(lèi)的析夠函數(shù)
- 對(duì)象生命周期結(jié)束的時(shí)候,一般是在離對(duì)象最近的右花括號(hào)處
- 類(lèi)的對(duì)象之間如何實(shí)現(xiàn)數(shù)據(jù)的共享
- 通過(guò)類(lèi)的靜態(tài)成員變量來(lái)實(shí)現(xiàn),靜態(tài)成員變量有自己獨(dú)立的存儲(chǔ)空間,數(shù)據(jù)為整個(gè)類(lèi)的所有成員所共享,都能訪問(wèn)。
- 類(lèi)的數(shù)據(jù)成員初始化的順序
- 初始化的順序由他們?cè)陬?lèi)的聲明中的順序決定的。
- virtual函數(shù)實(shí)現(xiàn)多態(tài)的時(shí)候子類(lèi)中的覆蓋函數(shù)這個(gè)關(guān)鍵字是否是必須的?
- virtual關(guān)鍵字會(huì)被隱形繼承,即使子類(lèi)中不加這個(gè)關(guān)鍵字也能實(shí)現(xiàn)多態(tài)
- 函數(shù)重載與虛函數(shù)在實(shí)現(xiàn)函數(shù)的多態(tài)上有什么區(qū)別
- 函數(shù)重載是通過(guò)函數(shù)簽名不同(函數(shù)名、函數(shù)參數(shù)個(gè)數(shù)、函數(shù)參數(shù)的類(lèi)型)在編譯期間實(shí)現(xiàn)的靜態(tài)的多態(tài);虛函數(shù)是通過(guò)類(lèi)之間的繼承關(guān)系和函數(shù)在子類(lèi)中被覆蓋,
- 友元關(guān)系的特性
- 單向性、非傳遞性、不能繼承的。
- 構(gòu)造函數(shù)和析構(gòu)函數(shù)能否重載?
- 構(gòu)造函數(shù)可以有多個(gè)且參數(shù)不同,可以重載;析構(gòu)函數(shù)只能有一個(gè)所以不能重載,而且他沒(méi)有參數(shù)。
- 虛函數(shù)的實(shí)現(xiàn)
- 虛函數(shù)表(虛表指針)???
- main函數(shù)執(zhí)行前還會(huì)執(zhí)行什么代碼
- 全局域的對(duì)象的構(gòu)造函數(shù)會(huì)在main函數(shù)執(zhí)行前執(zhí)行
- 當(dāng)一個(gè)類(lèi)中沒(méi)有聲明任何變量和函數(shù)時(shí),sizeof 類(lèi)是多少,為什么?
- 大小是1,是為了在程序中給不同的對(duì)象分配不同的內(nèi)存地址,來(lái)區(qū)分類(lèi)的不同對(duì)象。
- delete 與 delete[] 的區(qū)別
- delete只調(diào)用一次析構(gòu)函數(shù),后者會(huì)調(diào)用每一個(gè)對(duì)象的析構(gòu)函數(shù)。
- 基類(lèi)和派生類(lèi)析構(gòu)和構(gòu)造函數(shù)的調(diào)用順序
- 在對(duì)象創(chuàng)建過(guò)程中基類(lèi)的構(gòu)造函數(shù)會(huì)被先調(diào)用,然后是本類(lèi)的構(gòu)造函數(shù);析構(gòu)函數(shù)的調(diào)用過(guò)程相反。在基類(lèi)的構(gòu)造函數(shù)工作的過(guò)程中,本類(lèi)的對(duì)象沒(méi)有被完全建立,本類(lèi)的信息是不完整的,同理,在析構(gòu)過(guò)程中,基類(lèi)的析構(gòu)函數(shù)工作過(guò)程中,本類(lèi)的信息也已經(jīng)被銷(xiāo)毀了。
- 繼承的優(yōu)缺點(diǎn)
- 是代碼復(fù)用的一種方式,提供一定程度上的靈活性,優(yōu)點(diǎn)也成為了限制。
- 類(lèi)的構(gòu)造和析構(gòu)函數(shù)什么時(shí)候被調(diào)用,被誰(shuí)調(diào)用?
- 分別在類(lèi)的生命周期開(kāi)始和結(jié)束時(shí)被系統(tǒng)自動(dòng)調(diào)用。有時(shí)也可以由程序員手動(dòng)調(diào)用。
- 預(yù)編譯
- 多個(gè)模塊,不經(jīng)常改動(dòng)。
- c++中多態(tài)的實(shí)現(xiàn)
- a.靜態(tài)多態(tài),在編譯期間確定(函數(shù)模板和函數(shù)重載,注意函數(shù)缺省參數(shù)),b.動(dòng)態(tài)多態(tài),在運(yùn)行期間確定(虛函數(shù),覆蓋,指針或引用)
- c++中四大特性的作用
- 封裝使代碼能夠模塊化,繼承使代碼易于擴(kuò)展,而多態(tài)是為了接口的一致和重用,抽象???(數(shù)據(jù)抽象、算法抽象)類(lèi)的概念,模板的概念
- 普通函數(shù)、靜態(tài)函數(shù)、友元函數(shù)為什么不能為虛函數(shù)
- 普通函數(shù)會(huì)在編譯時(shí)確定代碼,無(wú)法實(shí)現(xiàn)動(dòng)態(tài)多態(tài);類(lèi)的靜態(tài)成員函數(shù)在基類(lèi)和所有子類(lèi)中只有一份拷貝,友元函數(shù)沒(méi)有繼承的特性,也無(wú)法實(shí)現(xiàn)動(dòng)態(tài)多態(tài),所以沒(méi)必要支持虛函數(shù)
- 內(nèi)聯(lián)函數(shù)為什么不能為虛函數(shù)
- 內(nèi)聯(lián)函數(shù)是為了在編譯期間將代碼展開(kāi),虛函數(shù)是為了在運(yùn)行時(shí)支持執(zhí)行多個(gè)不同的代碼分支,從概念上就是不兼容的。
- 構(gòu)造函數(shù)為什么不能是虛函數(shù)
- a.虛函數(shù)的實(shí)現(xiàn)需要虛表的支持,此時(shí)虛表尚未建立 b.構(gòu)造函數(shù)無(wú)法通過(guò)指針或引用來(lái)調(diào)用,所以不必設(shè)置為虛函數(shù) c.虛函數(shù)的實(shí)現(xiàn)需要通過(guò)指針或引用確定對(duì)象的類(lèi)型,構(gòu)造函數(shù)被調(diào)用時(shí)還沒(méi)有完整的對(duì)象,無(wú)法確定對(duì)象類(lèi)型,所以無(wú)法設(shè)置為虛函數(shù)。
- 為什么基類(lèi)的析構(gòu)函數(shù)最好設(shè)置為虛函數(shù)?
- 因?yàn)閯?dòng)態(tài)多態(tài)性支持通過(guò)基類(lèi)指針或引用來(lái)使用派生類(lèi)對(duì)象,此時(shí)當(dāng)派生類(lèi)對(duì)象需要析構(gòu)時(shí),只有析構(gòu)函數(shù)是虛函數(shù)時(shí),才能正確的析構(gòu)
- 類(lèi)的私有成員可以被哪些函數(shù)訪問(wèn)
- 可以被本類(lèi)的成員函數(shù)和友元訪問(wèn)
- 類(lèi)的保護(hù)成員可以被那些函數(shù)訪問(wèn)
- 可以被本類(lèi)的成員函數(shù)和友元和公有和保護(hù)派生方式派生出來(lái)的類(lèi)訪問(wèn)
- 常引用
- 既提高程序運(yùn)行的效率又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不再函數(shù)中被改變
- 指針和引用的區(qū)別
- 引用必須被初始化,初始化后就不可以改變而指針不必,指針可以指向空值,引用不可以。
- switch后的表達(dá)式不可以為什么類(lèi)型
- 可以為整型、字符、布爾、枚舉類(lèi)型;不可以為浮點(diǎn)型數(shù)據(jù)。
- 如何引用一個(gè)定義過(guò)的全局變量
- a. 全局變量在頭文件內(nèi),可以直接引用頭文件后使用 b. 如果在其他源文件中定義的全局變量,可以使用extern關(guān)鍵字使用此全局變量。
- 頻繁使用的短小函數(shù)在c/c++語(yǔ)言中如何處理
- 在c語(yǔ)言中使用宏定義,在c++語(yǔ)言中使用內(nèi)聯(lián)函數(shù)。
- 內(nèi)存分配的三種方式
- 靜態(tài)存儲(chǔ)區(qū)分配在編譯期間確定、棧上分配、堆上動(dòng)態(tài)分配。
- extern "C"有什么用
- 用來(lái)在c++程序程序中聲明特定的程序語(yǔ)句或語(yǔ)句塊按照c語(yǔ)言的函數(shù)命名規(guī)則進(jìn)行編譯。
- 使用#define和const定義常量有什么區(qū)別
- #define是C語(yǔ)言預(yù)處理器的語(yǔ)法關(guān)鍵字,在編譯期間只執(zhí)行常量替換;const是C++語(yǔ)言定義常變量的方法,它具有類(lèi)型,有內(nèi)存分配,可以用sizeof測(cè)試出長(zhǎng)度。
- struct和class的區(qū)別
- struct成員默認(rèn)訪控屬性是公有的,而class的默認(rèn)訪控屬性是私有的。
- 局部變量和全局變量能否同名?
- 可以,局部變量會(huì)屏蔽全局變量;要訪問(wèn)全局變量需要使用::域運(yùn)算符。
- assert宏
- 用于調(diào)試程序,以避免程序中出現(xiàn)明顯錯(cuò)誤的或非法的數(shù)據(jù),可以使用
#define NDEBUG來(lái)在特定版本的程序中禁止使用assert斷言 - windows消息隊(duì)列由哪幾部分組成
- a. 系統(tǒng)消息隊(duì)列,由操作系統(tǒng)負(fù)責(zé)將消息投放到特定的應(yīng)用程序的消息隊(duì)列中 b. 應(yīng)用程序消息循環(huán),每個(gè)應(yīng)用程序都有各自的消息隊(duì)列,在應(yīng)用程序消息循環(huán)中,不斷地從自己的消息隊(duì)列中取出消息并進(jìn)行特定的消息的處理,然后再將消息交由windows操作系統(tǒng)來(lái)調(diào)用相應(yīng)的窗口處理函數(shù) c. 窗口處理函數(shù),除了在消息循環(huán)中已經(jīng)處理的消息外,其他的消息都會(huì)由操作系統(tǒng)調(diào)用相應(yīng)的窗口處理函數(shù)來(lái)處理不同的消息。
- sendmessage 和 postmessage有什么區(qū)別
- sendmessage是直接將消息過(guò)程跳過(guò)消息隊(duì)列和消息循環(huán)直接交由特定的窗口處理函數(shù)進(jìn)行處理,并等待消息處理結(jié)束返回。postmessage是將消息放入應(yīng)用程序消息隊(duì)列中,但是并不等待消息處理結(jié)束而是即刻返回。
- 消息映射
- 是在mfc類(lèi)中,程序員通過(guò)將系統(tǒng)消息映射到類(lèi)的成員函數(shù)從而實(shí)現(xiàn)mfc類(lèi)對(duì)操作系統(tǒng)消息的各種處理。
- 構(gòu)成win32 api的三個(gè)動(dòng)態(tài)鏈接庫(kù)是什么
- kernel32.dll、user32.dll和gdi32.dll
- windows消息分為幾類(lèi),并對(duì)各個(gè)類(lèi)進(jìn)行簡(jiǎn)要的介紹?
- a.窗口消息:與窗口相關(guān)的消息,除
WM_COMMANDb. 命令消息:用于處理用戶請(qǐng)求,以WM_COMMAND表示的消息 c. 控件通知消息:統(tǒng)一由WM_NOTIFY處理 - 在類(lèi)的頭文件中進(jìn)行聲明然后在定義文件中實(shí)現(xiàn)有什么意義?
- 一方面使類(lèi)的實(shí)現(xiàn)只編譯一次,提高編譯效率;另一方面可以實(shí)現(xiàn)類(lèi)的接口和實(shí)現(xiàn)的分離,利于維護(hù)
- 在類(lèi)的聲明內(nèi)部實(shí)現(xiàn)成員函數(shù)的函數(shù)體
- 這種成員函數(shù)自動(dòng)成為內(nèi)聯(lián)函數(shù),這種函數(shù)在編譯階段只要是用到的地方都會(huì)進(jìn)行代碼替換
- 成員函數(shù)通過(guò)什么來(lái)區(qū)分不同的對(duì)象
- 通過(guò)普通成員函數(shù)隱含的this指針來(lái)區(qū)分不同對(duì)象。一個(gè)類(lèi)的不同對(duì)象之間代碼是共享的,只有數(shù)據(jù)是不同的,this指針指向這些不同的數(shù)據(jù)內(nèi)存位置的首地址。
- 拷貝構(gòu)造函數(shù)的使用情形
- a.在使用對(duì)象去初始化同類(lèi)的另一個(gè)對(duì)象時(shí) b.函數(shù)調(diào)用時(shí)使用類(lèi)對(duì)象作為形參時(shí) c.函數(shù)返回值返回一個(gè)類(lèi)對(duì)象時(shí)
- 什么時(shí)候必須重寫(xiě)拷貝構(gòu)造函數(shù)
- 當(dāng)類(lèi)的成員需要對(duì)指針進(jìn)行深拷貝時(shí),需要在用到的構(gòu)造函數(shù)內(nèi)進(jìn)行動(dòng)態(tài)內(nèi)存分配,相應(yīng)的要在析構(gòu)函數(shù)內(nèi)進(jìn)行動(dòng)態(tài)內(nèi)存釋放
- 構(gòu)造函數(shù)調(diào)用的順序
- a.調(diào)用基類(lèi)的構(gòu)造函數(shù) b.按聲明中的順序?qū)︻?lèi)的數(shù)據(jù)成員進(jìn)行初始化 c.調(diào)用本類(lèi)自己的構(gòu)造函數(shù)
- 什么情況下必須用到初始化成員列表
- a. 類(lèi)的成員具有一經(jīng)初始化便不能修改的特性如常屬性和引用 b. 類(lèi)的成員是另一個(gè)類(lèi),且這個(gè)類(lèi)沒(méi)有默認(rèn)的構(gòu)造函數(shù)(即需要傳參數(shù))
- 類(lèi)的靜態(tài)成員函數(shù)存在的意義
- 相比普通成員函數(shù)不需要生成對(duì)象、沒(méi)有this指針的開(kāi)銷(xiāo),效率稍高;為無(wú)需實(shí)例化的函數(shù)提供了一種貼切的實(shí)現(xiàn)方式。
- 在類(lèi)外有什么辦法訪問(wèn)類(lèi)的非共有成員
- 友元、繼承和公有成員函數(shù)
- 抽象類(lèi)
- 不能用來(lái)建立對(duì)象只能用作繼承的基類(lèi),具體的是成員函數(shù)至少有一個(gè)是純虛函數(shù)(聲明中=0,而不管這個(gè)函數(shù)是否有實(shí)現(xiàn)代碼)
- 運(yùn)算符重載的意義
- 為自定義的數(shù)據(jù)類(lèi)型提供與語(yǔ)言內(nèi)置的類(lèi)型提供一致的數(shù)據(jù)操作接口
- 不允許重載的5個(gè)運(yùn)算符
- .*、::、sizeof、?:、.
- 流運(yùn)算符為什么不能通過(guò)成員函數(shù)重載?一般怎么解決
- 在類(lèi)內(nèi)對(duì)運(yùn)算符進(jìn)行重載要求運(yùn)算符的第一個(gè)操作數(shù)必須是本類(lèi)的對(duì)象,因?yàn)榱鲗?duì)象屬于標(biāo)準(zhǔn)庫(kù)的類(lèi),無(wú)法實(shí)現(xiàn)在標(biāo)準(zhǔn)庫(kù)中對(duì)各種自定義的類(lèi)的流操作進(jìn)行重載。一般通過(guò)自定義類(lèi)的友元函數(shù)來(lái)實(shí)現(xiàn)類(lèi)流操作符的重載
- 賦值運(yùn)算符和拷貝構(gòu)造函數(shù)有什么區(qū)別和聯(lián)系
- 他們都是通過(guò)類(lèi)的一個(gè)對(duì)象來(lái)建立起類(lèi)的另一個(gè)對(duì)象,但拷貝構(gòu)造函數(shù)涉及到對(duì)象的構(gòu)造,賦值運(yùn)算符不需要建立對(duì)象
- 什么情況下調(diào)用類(lèi)的析夠函數(shù)
- 對(duì)象生命周期結(jié)束的時(shí)候,一般是在離對(duì)象最近的右花括號(hào)處
- 類(lèi)的對(duì)象之間如何實(shí)現(xiàn)數(shù)據(jù)的共享
- 通過(guò)類(lèi)的靜態(tài)成員變量來(lái)實(shí)現(xiàn),靜態(tài)成員變量有自己獨(dú)立的存儲(chǔ)空間,數(shù)據(jù)為整個(gè)類(lèi)的所有成員所共享,都能訪問(wèn)。
- 類(lèi)的數(shù)據(jù)成員初始化的順序
- 初始化的順序由他們?cè)陬?lèi)的聲明中的順序決定的。
- virtual函數(shù)實(shí)現(xiàn)多態(tài)的時(shí)候子類(lèi)中的覆蓋函數(shù)這個(gè)關(guān)鍵字是否是必須的?
- virtual關(guān)鍵字會(huì)被隱形繼承,即使子類(lèi)中不加這個(gè)關(guān)鍵字也能實(shí)現(xiàn)多態(tài)
- 函數(shù)重載與虛函數(shù)在實(shí)現(xiàn)函數(shù)的多態(tài)上有什么區(qū)別
- 函數(shù)重載是通過(guò)函數(shù)簽名不同(函數(shù)名、函數(shù)參數(shù)個(gè)數(shù)、函數(shù)參數(shù)的類(lèi)型)在編譯期間實(shí)現(xiàn)的靜態(tài)的多態(tài);虛函數(shù)是通過(guò)類(lèi)之間的繼承關(guān)系和函數(shù)在子類(lèi)中被覆蓋,
- 友元關(guān)系的特性
- 單向性、非傳遞性、不能繼承的。
- 構(gòu)造函數(shù)和析構(gòu)函數(shù)能否重載?
- 構(gòu)造函數(shù)可以有多個(gè)且參數(shù)不同,可以重載;析構(gòu)函數(shù)只能有一個(gè)所以不能重載,而且他沒(méi)有參數(shù)。
- 虛函數(shù)的實(shí)現(xiàn)
- 虛函數(shù)表(虛表指針)???
- main函數(shù)執(zhí)行前還會(huì)執(zhí)行什么代碼
- 全局域的對(duì)象的構(gòu)造函數(shù)會(huì)在main函數(shù)執(zhí)行前執(zhí)行
- 當(dāng)一個(gè)類(lèi)中沒(méi)有聲明任何變量和函數(shù)時(shí),sizeof 類(lèi)是多少,為什么?
- 大小是1,是為了在程序中給不同的對(duì)象分配不同的內(nèi)存地址,來(lái)區(qū)分類(lèi)的不同對(duì)象。
- delete 與 delete[] 的區(qū)別
- delete只調(diào)用一次析構(gòu)函數(shù),后者會(huì)調(diào)用每一個(gè)對(duì)象的析構(gòu)函數(shù)。
- 基類(lèi)和派生類(lèi)析構(gòu)和構(gòu)造函數(shù)的調(diào)用順序
- 在對(duì)象創(chuàng)建過(guò)程中基類(lèi)的構(gòu)造函數(shù)會(huì)被先調(diào)用,然后是本類(lèi)的構(gòu)造函數(shù);析構(gòu)函數(shù)的調(diào)用過(guò)程相反。在基類(lèi)的構(gòu)造函數(shù)工作的過(guò)程中,本類(lèi)的對(duì)象沒(méi)有被完全建立,本類(lèi)的信息是不完整的,同理,在析構(gòu)過(guò)程中,基類(lèi)的析構(gòu)函數(shù)工作過(guò)程中,本類(lèi)的信息也已經(jīng)被銷(xiāo)毀了。
- 繼承的優(yōu)缺點(diǎn)
- 是代碼復(fù)用的一種方式,提供一定程度上的靈活性,優(yōu)點(diǎn)也成為了限制。
- 類(lèi)的構(gòu)造和析構(gòu)函數(shù)什么時(shí)候被調(diào)用,被誰(shuí)調(diào)用?
- 分別在類(lèi)的生命周期開(kāi)始和結(jié)束時(shí)被系統(tǒng)自動(dòng)調(diào)用。有時(shí)也可以由程序員手動(dòng)調(diào)用。
- 預(yù)編譯
- 多個(gè)模塊,不經(jīng)常改動(dòng)。
- c++中多態(tài)的實(shí)現(xiàn)
- a.靜態(tài)多態(tài),在編譯期間確定(函數(shù)模板和函數(shù)重載,注意函數(shù)缺省參數(shù)),b.動(dòng)態(tài)多態(tài),在運(yùn)行期間確定(虛函數(shù),覆蓋,指針或引用)
- c++中四大特性的作用
- 封裝使代碼能夠模塊化,繼承使代碼易于擴(kuò)展,而多態(tài)是為了接口的一致和重用,抽象???(數(shù)據(jù)抽象、算法抽象)類(lèi)的概念,模板的概念
- 普通函數(shù)、靜態(tài)函數(shù)、友元函數(shù)為什么不能為虛函數(shù)
- 普通函數(shù)會(huì)在編譯時(shí)確定代碼,無(wú)法實(shí)現(xiàn)動(dòng)態(tài)多態(tài);類(lèi)的靜態(tài)成員函數(shù)在基類(lèi)和所有子類(lèi)中只有一份拷貝,友元函數(shù)沒(méi)有繼承的特性,也無(wú)法實(shí)現(xiàn)動(dòng)態(tài)多態(tài),所以沒(méi)必要支持虛函數(shù)
- 內(nèi)聯(lián)函數(shù)為什么不能為虛函數(shù)
- 內(nèi)聯(lián)函數(shù)是為了在編譯期間將代碼展開(kāi),虛函數(shù)是為了在運(yùn)行時(shí)支持執(zhí)行多個(gè)不同的代碼分支,從概念上就是不兼容的。
- 構(gòu)造函數(shù)為什么不能是虛函數(shù)
- a.虛函數(shù)的實(shí)現(xiàn)需要虛表的支持,此時(shí)虛表尚未建立 b.構(gòu)造函數(shù)無(wú)法通過(guò)指針或引用來(lái)調(diào)用,所以不必設(shè)置為虛函數(shù) c.虛函數(shù)的實(shí)現(xiàn)需要通過(guò)指針或引用確定對(duì)象的類(lèi)型,構(gòu)造函數(shù)被調(diào)用時(shí)還沒(méi)有完整的對(duì)象,無(wú)法確定對(duì)象類(lèi)型,所以無(wú)法設(shè)置為虛函數(shù)。
- 為什么基類(lèi)的析構(gòu)函數(shù)最好設(shè)置為虛函數(shù)?
- 因?yàn)閯?dòng)態(tài)多態(tài)性支持通過(guò)基類(lèi)指針或引用來(lái)使用派生類(lèi)對(duì)象,此時(shí)當(dāng)派生類(lèi)對(duì)象需要析構(gòu)時(shí),只有析構(gòu)函數(shù)是虛函數(shù)時(shí),才能正確的析構(gòu)
- 類(lèi)的私有成員可以被哪些函數(shù)訪問(wèn)
- 可以被本類(lèi)的成員函數(shù)和友元訪問(wèn)
- 類(lèi)的保護(hù)成員可以被那些函數(shù)訪問(wèn)
- 可以被本類(lèi)的成員函數(shù)和友元和公有和保護(hù)派生方式派生出來(lái)的類(lèi)訪問(wèn)
- 常引用
- 既提高程序運(yùn)行的效率又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不再函數(shù)中被改變
- 指針和引用的區(qū)別
- 引用必須被初始化,初始化后就不可以改變而指針不必,指針可以指向空值,引用不可以。
- switch后的表達(dá)式不可以為什么類(lèi)型
- 可以為整型、字符、布爾、枚舉類(lèi)型;不可以為浮點(diǎn)型數(shù)據(jù)。
- 如何引用一個(gè)定義過(guò)的全局變量
- a. 全局變量在頭文件內(nèi),可以直接引用頭文件后使用 b. 如果在其他源文件中定義的全局變量,可以使用extern關(guān)鍵字使用此全局變量。
- 頻繁使用的短小函數(shù)在c/c++語(yǔ)言中如何處理
- 在c語(yǔ)言中使用宏定義,在c++語(yǔ)言中使用內(nèi)聯(lián)函數(shù)。
- 內(nèi)存分配的三種方式
- 靜態(tài)存儲(chǔ)區(qū)分配在編譯期間確定、棧上分配、堆上動(dòng)態(tài)分配。
- extern "C"有什么用
- 用來(lái)在c++程序程序中聲明特定的程序語(yǔ)句或語(yǔ)句塊按照c語(yǔ)言的函數(shù)命名規(guī)則進(jìn)行編譯。
- 使用#define和const定義常量有什么區(qū)別
- #define是C語(yǔ)言預(yù)處理器的語(yǔ)法關(guān)鍵字,在編譯期間只執(zhí)行常量替換;const是C++語(yǔ)言定義常變量的方法,它具有類(lèi)型,有內(nèi)存分配,可以用sizeof測(cè)試出長(zhǎng)度。
- struct和class的區(qū)別
- struct成員默認(rèn)訪控屬性是公有的,而class的默認(rèn)訪控屬性是私有的。
- 局部變量和全局變量能否同名?
- 可以,局部變量會(huì)屏蔽全局變量;要訪問(wèn)全局變量需要使用::域運(yùn)算符。
- assert宏
- 用于調(diào)試程序,以避免程序中出現(xiàn)明顯錯(cuò)誤的或非法的數(shù)據(jù),可以使用
#define NDEBUG來(lái)在特定版本的程序中禁止使用assert斷言 - windows消息隊(duì)列由哪幾部分組成
- a. 系統(tǒng)消息隊(duì)列,由操作系統(tǒng)負(fù)責(zé)將消息投放到特定的應(yīng)用程序的消息隊(duì)列中 b. 應(yīng)用程序消息循環(huán),每個(gè)應(yīng)用程序都有各自的消息隊(duì)列,在應(yīng)用程序消息循環(huán)中,不斷地從自己的消息隊(duì)列中取出消息并進(jìn)行特定的消息的處理,然后再將消息交由windows操作系統(tǒng)來(lái)調(diào)用相應(yīng)的窗口處理函數(shù) c. 窗口處理函數(shù),除了在消息循環(huán)中已經(jīng)處理的消息外,其他的消息都會(huì)由操作系統(tǒng)調(diào)用相應(yīng)的窗口處理函數(shù)來(lái)處理不同的消息。
- sendmessage 和 postmessage有什么區(qū)別
- sendmessage是直接將消息過(guò)程跳過(guò)消息隊(duì)列和消息循環(huán)直接交由特定的窗口處理函數(shù)進(jìn)行處理,并等待消息處理結(jié)束返回。postmessage是將消息放入應(yīng)用程序消息隊(duì)列中,但是并不等待消息處理結(jié)束而是即刻返回。
- 消息映射
- 是在mfc類(lèi)中,程序員通過(guò)將系統(tǒng)消息映射到類(lèi)的成員函數(shù)從而實(shí)現(xiàn)mfc類(lèi)對(duì)操作系統(tǒng)消息的各種處理。
- 構(gòu)成win32 api的三個(gè)動(dòng)態(tài)鏈接庫(kù)是什么
- kernel32.dll、user32.dll和gdi32.dll
- windows消息分為幾類(lèi),并對(duì)各個(gè)類(lèi)進(jìn)行簡(jiǎn)要的介紹?
- a.窗口消息:與窗口相關(guān)的消息,除
WM_COMMANDb. 命令消息:用于處理用戶請(qǐng)求,以WM_COMMAND表示的消息 c. 控件通知消息:統(tǒng)一由WM_NOTIFY表示 d.用戶自定義消息 - windows如何自定義消息
- 使用
WM_USER和WM_APP來(lái)自定義消息 - 怎么消除多重繼承中的二義性
- a.使用成員限定符 b.使用虛基類(lèi)
- 運(yùn)行時(shí)多態(tài)的條件
- a.繼承 b.基類(lèi)虛函數(shù)在子類(lèi)中被重寫(xiě) c.使用基類(lèi)指針或引用指向子類(lèi)對(duì)象
- MFC中大部分類(lèi)是從哪個(gè)類(lèi)中繼承而來(lái)
- CObject類(lèi)->CCmdTarget類(lèi)
- c++類(lèi)成員函數(shù)重載、覆蓋和隱藏的區(qū)別
- 重載的條件(3個(gè))、在基類(lèi)和派生類(lèi)的同名函數(shù)之間的關(guān)系除了覆蓋之外都是隱藏關(guān)系。覆蓋的條件(有繼承關(guān)系的父子類(lèi)之間的同名函數(shù),如果參數(shù)相同,返回值協(xié)變且基類(lèi)函數(shù)有virtual關(guān)鍵字的話,則同名函數(shù)之間構(gòu)成了覆蓋關(guān)系)。
- 如何打印出當(dāng)前源文件的文件名和行號(hào)
__FILE__和__LINE__
請(qǐng)使用BFS多讀書(shū)。。。

浙公網(wǎng)安備 33010602011771號(hào)