C++面試題

前幾天參加西門子上海的面試,問到的相關問題記錄如下:

1.給函數的默認參數賦值的順序是怎樣的?原理是什麼?

第一問答對了,但是原理沒說上來。

2.子類繼承於父類時,構造函數的調用順序是什麼?請從運行時狀態解釋原因?

第一問答對,但是不清楚運行時原理

3.virtual malloc?(記不得是不是這個了,反正與malloc有關)

4.構造函數能否聲明爲virtual?爲什麼?

不能,原因有以下兩個解釋:

解釋一:所謂虛函數就是多態情況下只執行一個。而從繼承的概念來講,總是要先構造父類對象,然後才能是子類對象。如果構造函數設爲虛函數,那麼當你在構造父類的構造函數時就不得不顯示的調用構造。還有一個原因就是爲了防錯,試想如果你在子類中一不小心重寫了個跟父類構造函數一樣的函數,那麼你的父類的構造函數將被覆蓋,也即不能完成父類的構造.就會出錯。

解釋二:虛函數的主要意義在於被派生類繼承從而產生多態。派生類的構造函數中,編譯器會加入構造基類的代碼,如果基類的構造函數用到參數,則派生類在其構造函數的初始化列表中必須爲基類給出參數,就是這個原因。

虛函數的意思就是開啓動態綁定,程序會根據對象的動態類型來選擇要調用的方法。然而在構造函數運行的時候,這個對象的動態類型還不完整,沒有辦法確定它到底是什麼類型,故構造函數不能動態綁定。(動態綁定是根據對象的動態類型而不是函數名,在調用構造函數之前,這個對象根本就不存在,它怎麼動態綁定?)

編譯器在調用基類的構造函數的時候並不知道你要構造的是一個基類的對象還是一個派生類的對象。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lmsnju/archive/2010/03/16/5386617.aspx

 

 

5.類中不聲明構造函數,系統就會調用系統默認的構造函數。調用系統默認構造函數會有哪些缺陷?

答:當類中含有指針類型的成員變量時,調用系統默認的構造函數可能會出錯。因爲默認構造函數對成員的初始化採用的是“淺拷貝”,而不是“深拷貝”。(還需要理解)

6.MFC中,send messagepost message有什麼區別?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章