天天看點

c++面試知識總結

1、對于一個頻繁使用的短小函數,在c語言中應用什麼實作,在c++中應用什麼實作

  答:c:宏定義;c++:inline内聯函數

2、全局變量和局部變量的差別?

  答:

    1、生命周期不同:

      全局變量:随主程式建立而建立,随主程式結束而銷毀。

      局部變量:函數或者{}括号内部,退出或執行完就銷毀

    2、作用域不同:

      全局變量:源檔案内所有函數都可以使用

      局部變量:函數内部或者{}括号内部有效,隻能局部使用

    3、記憶體配置設定不同:

      全局變量:全局資料段并且在程式運作的時候加載

      局部變量:配置設定在堆棧裡

3、在申請記憶體找不大足夠大的記憶體塊,malloc和new将傳回NULL指針,記憶體申請失敗,怎麼處理記憶體耗盡?

  答:直接return

4、如何判斷一個作業系統是16位還是32位系統

    1、使用變量指針*p,sizeof(p) == 2 為16位,==4 為32位

    2、unsigned int a = ~0; if( a > 65536 ) 為32位,否則 16位

5、為什麼數組名做參數會改變數組内容?

  答:數組名就是數組的首位址

6、析構函數和虛函數的用法和作用?

    析構函數:是c++特殊的類成員函數,沒傳回值、沒參數、不能調用。在類對象執行完畢,作用是銷毀并釋放記憶體。

    虛函數:是c++多态的一種表現,使用虛函數可以動态綁定,當然也會以系統開銷為代價的

7、引用和指針有什麼差別?

    引用:必須初始化;初始化後不能改變;不存在指向空值

    指針:不必初始化;指針可以改變所指對象;指針可以指向空值

8、虛函數隻能借助引用或者指針來達到多态的效果。

9、在c++中能否有虛構造函數?

  答:不能,隻能有虛析構函數。

10、重載、重寫、重定義的差別?

    重載:類對象的同名不同參函數

    重寫:子類繼承父類的函數

    重定義:子類繼承父類的虛函數

11、i++和++i的效率比較

    -》内建資料類型的情況,效率一樣

    -》自定義資料類型的情況,++i效率高

12、了解内聯函數和宏的差別

    -》内聯函數在編譯時展開,宏在預編譯時展開

繼續閱讀