面試常見cc問題_第1頁
面試常見cc問題_第2頁
面試常見cc問題_第3頁
面試常見cc問題_第4頁
面試常見cc問題_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、(1).頭文件中的 ifndef/define/endif 干什么用?預(yù)處理(2). i nclude 和 i nclude “filename.h”區(qū)別?3.sic C、C+中的用法在 C 中 sic 用來修飾局部靜態(tài)變量和外部靜態(tài)變量、函數(shù)。而 C+中除了上述功能外,還用來定義類的成員變量和函數(shù)。即靜態(tài)成員和靜態(tài)成員函數(shù)。注意:編程時 sic 的性,和全局性的特點可以讓在不同時期調(diào)用的函數(shù)進行通信,傳遞信息,而 C+的靜態(tài)成員則可以在多個對象實例間進行通信,傳遞信息。1. C 中 sic作用(1)隱藏。 當(dāng) 同時編譯多個文件時,所有未加 s ic 前綴的全局變量和函數(shù)都具有全局可見性,故使

2、用 s ic 在不同的文件中定義同名函數(shù)和同名變量,而不必?fù)?dān)心命名 。(2)s ic 的第二個作用是保持變量內(nèi)容的持久。 在靜態(tài)數(shù)據(jù)區(qū)的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量在靜態(tài)區(qū):全局變量和 sic 變量。(3)sic 的第三個作用是默認(rèn)初始化為 0.其實全局變量也具備這一屬性,因為全局變量也在靜態(tài)數(shù)據(jù)區(qū)。在靜態(tài)數(shù)據(jù)區(qū),內(nèi)存中所有的字節(jié)默認(rèn)值都是 000,某些時候這一特點可以減少程序員的工作量。C+中 const用?不要一聽到 const 就說是常量,這樣給考官一種在和一個外行交談的感覺。應(yīng)該說 const 修飾的內(nèi)容不可改變就行了, 定義常量只是一種使用

3、方式而已,還有 const 數(shù)據(jù)成員,const 參數(shù), const 返回值, const 成員函數(shù)等, 被 const修飾的東西都受到強制保護,可以預(yù)防意外的變動,能提高程序的健壯性。C 與 C+各自是如何定義常量的?不同?C 中是使用宏#define 定義, C+使用更好的 const 來定義。區(qū)別:1)const 是有數(shù)據(jù)類型的常量,而宏常量沒有,編譯器可以對前者進行靜態(tài)類型安全檢查,對后者僅是字符替換,沒有類型安全檢查,而且在字符替換時可能會產(chǎn)生意料不到的錯誤(邊際效應(yīng))。2)有些編譯器可以對 const 常量進行調(diào)試, 不能對宏調(diào)試。4. 既然 C+中有更好的 const 為什么還要

4、使用宏?const 無法代替宏作為衛(wèi)哨來防止文件的重復(fù)包含。5. C+中和指針的區(qū)別?是對象的別名, 操作就是操作這個對象, 必須在創(chuàng)建的同時有效得初始化(一個有效的對象, 不可為 NULL), 初始化完畢就再也不可改變,上具有指針的效率, 又具有變量使用的方便性和直觀性, 在語言層面和對象的用法一樣, 在二進制層面上一般都是通過指針來實現(xiàn)的,是為了用適當(dāng)?shù)墓ぞ咦銮∪缙渲皇蔷幾g器幫完成了轉(zhuǎn)換。 之所以使用分的事, 體現(xiàn)了最小原則。6. 說一說 C 與 C+的內(nèi)存分配方式?1)從靜態(tài)區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在,如全局變量,sic 變量。2)在棧

5、上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些單元自動被。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。3)從堆上分配(動態(tài)內(nèi)存分配)程序在運行的時候用 malloc 或 new 申請任意多少的內(nèi)存,程序員負(fù)責(zé)在何時用 free 或 delete存期自己決定,使用非常靈活。內(nèi)存。動態(tài)內(nèi)存的生7. new/delete 與 malloc()/free() 的區(qū)別?malloc() 與 free() 是 C 語言的標(biāo)準(zhǔn)庫函數(shù), new/delete 是 C+的運算符, 他們都可以用來申請和內(nèi)存, malloc()和 free()不在編譯器控

6、制權(quán)限之內(nèi), 不能把構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強加給他們。 8. #include和#includea.h區(qū)別?答:對于#include ,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索 a.h 對于#includea.h ,編譯器從用戶的工作路徑開始搜索 a.h9. 在 C+ 程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加 extern C?C+語言支持函數(shù)重載,C 語言不支持函數(shù)重載。函數(shù)被 C+編譯后在庫中的名字與 C 語言的不同。假設(shè)某個函數(shù)的原型為: void foo(x,y);該函數(shù)被 C 編譯器編譯后在庫中的名字為_foo, 而 C+ 編譯器則會產(chǎn)生像_foo_之類的名字。C+提供了 C 連接交換指

7、定符號 externC來解決名字匹配問題。10. C+中的多態(tài)性? 是如何實現(xiàn)的?多態(tài)性是面象程序設(shè)計語言繼數(shù)據(jù)抽象和繼承之后的第三個基本特征。它是在運行時出現(xiàn)的多態(tài)性通過派生類和虛函數(shù)實現(xiàn)?;惡团缮愔惺褂猛瑯拥暮瘮?shù)名, 完成不同的操作具體實現(xiàn)相的另一類接口,即把 w h a t從h ow分離開來。多態(tài)性提高了代碼的組織性和可讀性,虛函數(shù)則根據(jù)類型的不同來進行不同的。11.動態(tài)特性?在絕大多數(shù)情況下, 程序的功能是在編譯的時候就確定下來的,稱之為靜態(tài)特性。 反之, 如果程序的功能是在運行時刻才能確定下來的, 則稱之為動態(tài)特性。C+中, 虛函數(shù),抽象基類, 動態(tài)綁定和多態(tài)特性。了出色的動態(tài)1

8、2.封裝?C+中是如何實現(xiàn)的?封裝來源于信息隱藏的設(shè)計理念, 是通過特性和行為的組合來創(chuàng)建新數(shù)據(jù)類型讓接口與具體實現(xiàn)相。C+中是通過類來實現(xiàn)的, 為了盡量避免某個面試題 1:變量的為變量分配地址和和定義區(qū)別空間的稱為定義,不分配地址的稱為。一個變量可以在多個地方,說明此變量將在文件以,但是只在一個地方定義。加入 extern 修飾的是變量的外或在文件后面部分定義。說明:很多時候一個變量,只是空間,如外部變量。不分配內(nèi)存空間,直到具體使用時才初始化,分配內(nèi)存鏈表和數(shù)組區(qū)別數(shù)組和鏈表有以下幾點不同:(1)形式:數(shù)組是一塊連續(xù)的空間,時就要確定長度。鏈表是一塊可不連續(xù)的動態(tài)空間,長度可變,每個結(jié)點要

9、保存相鄰結(jié)點指針。模塊的行為干擾同一系統(tǒng)中的其它模塊,應(yīng)該讓模塊僅僅公開必須讓外界知道的接口。RTTI?RTTI 事指運行時類型識別(Run-time type identification)在只有一個指向基類的指針或 時確定一個對象的準(zhǔn)確類型。拷貝構(gòu)造函數(shù)?它是單個參數(shù)的構(gòu)造函數(shù),其參數(shù)是與它同屬一類的對象的(常) ;類定義中,如果未提供自己的拷貝構(gòu)造函數(shù),C+提供一個默認(rèn)拷貝構(gòu)造函數(shù),該默認(rèn)拷貝構(gòu)造函數(shù)完成一個成員到一個成員的拷貝深淺拷貝?淺拷貝是創(chuàng)建了一個對象用一個現(xiàn)成的對象初始化它的時候只是 了成員(簡單賦值)而沒有拷貝分配給成員的資源(如給其指針變量成員分配了動態(tài)內(nèi)存); 深拷貝是當(dāng)

10、一個對象創(chuàng)建時,如果分配了資源,就需要定義自己的拷貝構(gòu)造函數(shù),使之不但拷貝成員也拷貝分配給它的資源。面象程序設(shè)計的優(yōu)點?開發(fā)時間短, 效率高, 可靠性高。面 象編程的編碼具有 重用性,可以在應(yīng)用程序中大量采用成 類庫(如 STL),從而雖短了開發(fā)時間,易于和升級。(2)數(shù)據(jù)查找:數(shù)組的線性查找速度快,查找操作直接使用偏移地址。鏈表需要按順序檢索結(jié)點,效率低。(3)數(shù)據(jù)或刪除:鏈表可以快速和刪除結(jié)點,而數(shù)組則可能需要大量數(shù)據(jù)移動。(4)越界問題:鏈表不存在越界問題,數(shù)組有越界問題。說明:在選擇數(shù)組或鏈表數(shù)據(jù)結(jié)構(gòu)時,一定要根據(jù)實際需要進行選擇。數(shù)組便于查詢,鏈表便于刪除。數(shù)組節(jié)省空間但是長度固定,

11、鏈表雖然變長但是占了的空間。面試題 17:簡述類成員函數(shù)的重寫、重載和隱藏的區(qū)別重寫和重載主要有以下幾點不同。范圍的區(qū)別:被重寫的和重寫的函數(shù)在兩個類中,而重載和被重載的函數(shù)在同一個類中。參數(shù)的區(qū)別:被重寫函數(shù)和重寫函數(shù)的參數(shù)列表一定相同,而被重載函數(shù)和重載函數(shù)的參數(shù)列表一定不同。virtual 的區(qū)別:重寫的基類中被重寫的函數(shù)必須要有 virtual 修飾,而重載函數(shù)和被重載函數(shù)可以被7virtual 修飾,也可以沒有。隱藏和重寫、重載有以下幾點不同。與重載的范圍不同:和重寫一樣,隱藏函數(shù)和被隱藏函數(shù)不在同一個類中。參數(shù)的區(qū)別:隱藏函數(shù)和被隱藏的函數(shù)的參數(shù)列表可以相同,也可不同,但是函數(shù)名肯

12、定要相同。當(dāng)參數(shù)不相同時,無論基類中的參數(shù)是否被 virtual 修飾,基類的函數(shù)都是被隱藏,而不是被重寫。說明:雖然重載和覆蓋都是實現(xiàn)多態(tài)的基礎(chǔ),但是兩者實現(xiàn)的技術(shù)完全不相同,達(dá)到的目的也是完全不同的,覆蓋是動態(tài)態(tài)綁定的多態(tài),而重載是靜態(tài)綁定的多態(tài)面試題 18:簡述多態(tài)實現(xiàn)的原理編譯器發(fā)現(xiàn)一個類中有虛函數(shù),便會立即為此類生成虛函數(shù)表 vtable。虛函數(shù)表的各表項為指應(yīng)虛函數(shù)的指針。編譯器還會在此類中隱含一個指針 vptr(對 vc 編譯器來說,它插在類的第一個位置上)指向虛函數(shù)表。調(diào)用此類的構(gòu)造函數(shù)時,在類的構(gòu)造函數(shù)中,編譯器會隱含執(zhí)行 vptr 與 vtable 的關(guān)聯(lián)代碼,將 vptr 指應(yīng)的 vtable

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論