C 多型的相關問題(1)

2021-08-21 07:49:31 字數 534 閱讀 6619

析構函式設定為虛函式的原因?

繼承類物件經由乙個基類指標被刪除,若基類是非虛的析構函式,則只能呼叫基類的析構函式,則繼承類新增的資料部分沒有被銷毀,造成資源洩漏,敗壞資料結構。

當乙個類不背當作基類、或者不具有多型性時,令其析構函式是虛函式是多餘的,浪費記憶體。

建構函式不能時虛函式的原因?

①:因為如果子類中的建構函式會繼承或者改變父類建構函式中做的一部分工作;如果父類建構函式為虛函式的話,子類建構函式會覆蓋父類建構函式,因此父類建構函式就沒有存在的必要。

②:虛函式的呼叫通過虛函式表來進行,而虛函式表必須要物件例項化之後才可以呼叫,因此這是乙個雞生蛋,蛋生雞的問題。

在建構函式/析構函式中為什麼不能呼叫虛函式?

①:因為派生類構造物件時先呼叫基類建構函式,因此發揮不了虛函式動態繫結的特性,跟普通函式沒有區別。

②:如果基類可以呼叫派生類建構函式中的虛函式,則由於派生類中的一些資料還沒初始化,因此會造成未定義行為或者程式bug。

C 多型相關

當通過指標訪問類的成員函式時 如果該函式是非虛函式,那麼編譯器會根據指標的型別找到該函式 也就是說,指標是哪個類的型別就呼叫哪個類的函式。如果該函式是虛函式,並且派生類有同名的函式遮蔽它,那麼編譯器會根據指標的指向找到該函式 也就是說,指標指向的物件屬於哪個類就呼叫哪個類的函式。這就是多型。編譯器之...

C 中的多型問題

1 c 中有兩種 形式 早 和晚 早 是有編譯器和聯結器實現的,晚 是由虛函式實現的,也就是晚 只對虛函式起作用 2 純虛函式的實現virtual void 函式名 0 0標誌著乙個函式為純虛函式,注意 沒有實現純虛函式的類不能進行例項化 因此將含有純虛函式的類叫做抽象類 3 函式的過載表現出函式的...

多型的相關總結

當不同的物件呼叫相同的名稱的成員函式的,可能引起不同的行為 即執行不同的 這種現象就稱為多型。將函式呼叫鏈結相應函式體的 過程稱為函式聯編。分為動態聯編和靜態聯編。靜態聯編,不同的類可以有相同名稱的函式,這種在編譯期間進行的聯編稱為靜態聯編。靜態聯編所支援的多型性就是編譯時多型性。函式過載就屬於編譯...