最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。
一是從來沒有這個意識,二是沒有認真的梳理下。
11.引用與指標有什麼區別?
【參***】
1) 引用必須被初始化,指標不必。
2) 引用初始化以後不能被改變,指標可以改變所指的物件。
3) 不存在指向空值的引用,但是存在指向空值的指標。
可以參考下 在 5 題中補充的內容
12.c++中virtual與inline的含義分別是什麼?
【參***】
在基類成員函式的宣告前加上virtual關鍵字,意味著將該成員函式宣告為虛函式。
inline與函式的定義體放在一起,使該函式稱為內聯。
inline是一種用於實現的關鍵字,而不是用於宣告的關鍵字。
虛函式的特點;如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態聯編。
內聯函式的特點;使用內聯函式的目的是為了提高函式的執行效率。內聯函式體的**不能過長,因為內聯函式省去呼叫函式的時間是以**膨脹為代價的。內聯函式不能包含迴圈語句,因為執行迴圈語句要比呼叫函式的開銷大。
哈!我想我確實要注意一下表達能力。。
13.vc中,編譯工具條內的debug與release選項是什麼含義?
【參***】
debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。
release 稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。
debug帶有大量的除錯**,執行時需要相應的執行庫,
發布模式程式緊湊不含有除錯**和資訊,直接可以執行(如果不需要執行庫)
14.函式assert的用法?
【參***】斷言assert是僅在debug版本起作用的巨集,用於檢查「不應該「發生的情況。程式設計師可以把assert看成乙個在任何系統狀態下都可以安全使用的無害測試手段
學vc++的時候見過assert巨集定義,但是自己從來沒用過。。。
15.const 與 #define 的比較 ,const有什麼優點?
【參***】
(1) const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應) 。
#define不能生成 類的專屬常量,因為它只是進行簡單的替換。。
(2) 有些整合化的除錯工具可以對 const 常量進行除錯,但是不能對巨集常量進行除錯。
《effective c++》中建議以const、enum、inline代替#define。
使用enum的原因
有些情況下,編譯器不允許靜態常量出現在類的初始設定中,只得以enum的形式
另一方面,enum和#define更相似,它們都沒有具體的型別,比如,有const int a; 卻沒有 #define n int a,enum和#define都不能夠被去位址,而const可以。
16.請你談談引用和指標的區別。
【參***】
(1)引用被建立的同時必須被初始化(指標則可以在任何時候被初始化) 。
(2)不能有 null 引用,引用必須與合法的儲存單元關聯(指標則可以是 null) 。
(3)一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件) 。
不斷地出現,可見這個問題是經常容易被問到的。
17.有了 malloc/free 為什麼還要 new/delete ?
【參***】
malloc 與 free 是 c++/c 語言的標準庫函式,new/delete 是 c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。
對於非內部資料型別的物件而言,光用 malloc/free 無法滿足動態物件的要求。
物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。
由於malloc/free 是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於 malloc/free。
因此 c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子 new,以及乙個能完成清理與釋放記憶體工作的運算子 delete。注意 new/delete 不是庫函式。
以前只是習慣在用c時用malloc/free,用c++時用new/delete,沒注意到這些差異性。
18.如果在申請動態記憶體時找不到足夠大的記憶體塊,malloc 和 new 將返回 null 指標,宣告記憶體申請失敗。你是怎麼處理記憶體耗盡的?
【參***】
(1)判斷指標是否為 null,如果是則馬上用 return 語句終止本函式。
(2)判斷指標是否為 null,如果是則馬上用 exit(1)終止整個程式的執行
(3)為 new 和 malloc 設定異常處理函式。例如 visual c++可以用_set_new_hander 函式為 new 設定使用者自己定義的異常處理函式,也可以讓 malloc 享用與 new 相同的異常處理函式。
我一般是直接return 了
19.c++是不是型別安全的?
【參***】不是。兩個不同型別的指標之間可以強制轉換(用reinterpret cast)。
20. const 符號常量;
(1)const char *p
(2)char const *p (
3)char * const p
說明上面三種描述的區別;
【參***】
(1)p是乙個指向const char的指標,p是可以改變指向的,但是p指向的值是不能改變的;
(2)p指向的恰好是乙個指向const的char的普通指標;
(3)p是乙個指標,這個指標是指向char的const指標。
(1)和(2)的定義是一樣的。
1、2和3的區別在於,1和2的const出現在*號左邊,3出現在*號右邊。好像也是在《c和指標》上看到的這句話。
c 經典面試題
1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...
C 經典面試題
1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...
C 經典面試題
c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...