本人學習c++不精,故重新學習,點滴記錄與大家分享,不足之處還望大牛多多指教
當初面試遇到的面試題,後悔看完了,今天一看覺得當時回答的一塌糊塗。
先看**吧。
彙編如下:
在父類的建構函式中呼叫output虛函式,然後在子類的析構函式中也呼叫該函式,會有社麼結果呢?執行結果如下:
貌似有點眼熟,對,跟之前學c++時老師講的繼承關係時,父類子類的構造和析構順序,但是請注意,這裡的輸出不是簡單的在建構函式和析構函式裡,而是在構造和析構函式中呼叫的虛函式。很明顯在構造時呼叫虛函式,多型性完全沒有體現出來,因為先構造父類,在父類的建構函式中子類還沒構造出來,但是在析構函式就相反了,多型性體現出來了,但是c++並不保證再進入析構函式以後物件的成員還依然有效。所以這一點很重要,在建構函式中,子類的成員還未構造,在析構函式中子類的成員已經無效了,所以必須避免在構造和析構函式裡呼叫虛函式。也許這次程式執行ok,但指不定什麼時候就會出問題。
引用書上的話作總結吧,「在構造和析構期間不要呼叫virtual函式,因為這類呼叫從不下降至derived class(比起當前執行建構函式和析構函式的那層)」。
Effective C 學習筆記
學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...
Effective C 學習筆記
1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...
effective c 學習筆記
如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...