錢能C 語言讀書筆記(六)虛函式的限制

2021-05-24 08:52:40 字數 692 閱讀 5229

1、只有類成員函式才能宣告為虛函式。

這是因為虛函式僅適用於有繼承體系的類物件,所以普通函式不能宣告為虛函式。

2、靜態成員函式不能是虛函式。

因為靜態成員函式不受物件的**,即使形式上的**。實際上也沒有任何物件的資訊,只有類的資訊:

void fn(base & x)

操作不受物件**,也就失去了多型的條件。因為編譯是在識別到物件的**操作時,開始滯後**猶豫的。也就是說,多型是針對不同物件的,執行同一名稱的操作,而能強健地作出不同的抉擇的機制。沒有了物件的**,也就失去了多型的前提,編譯器也不會抉擇,不會有絲毫的猶豫了。

3、內聯函式不能是虛函式

因為內聯函式是不能在執行中動態地確定其位置的。即使虛函式在類的內部定義,編譯時,仍將其看做是非內聯的。

4、建構函式不能是虛函式

因為構造時,物件還是一片無定形的**地,只有在構造完成後,物件才能成為乙個類的名副其實的物件。

5、析構函式可以是虛函式且通常宣告為虛函式。

例如,當基類指標可能指向不同的子物件時,以該指標**的釋放空間操作,應該是針對不同類的析構函式的:

執行結果如下:

如果base類的繼承體系中,類的析構函式是虛函式,則在實施delete v[i]的時候,會相應地呼叫該物件**的析構函式。向量中的元素是物件指標,有的指向基類物件,有的指向子類物件,所以在析構時,應該針對不同的物件實體做不同的析構操作。

錢能C 語言讀書筆記(一)

1 標頭檔案的內容 1.1函式的宣告 int fun void max 1.2全域性資料的宣告 extern int n 1.3型別宣告 class a 1.4全域性常量定義 const float pi 3.1415926 1.5內聯函式定義 inline void fn 1.6模板宣告和定義 t...

錢能C 語言讀書筆記(二)

1 有記憶體申請,也就有記憶體釋放。一般來說,需要定義拷貝建構函式的類,也需要析構函式,不需要拷貝建構函式的類,也無須定義析構函式。所以析構函式與拷貝建構函式是成對出項的。因為析構函式是沒有引數的所以函式形式是唯一的,沒有過載的析構函式。析構函式在物件的生命週期行將結束的瞬時,由系統自動呼叫。因此,...

《c語言深度剖析》讀書筆記(六)函式

本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 函式的好處 2 編碼風格 3 函式設計的一般原則和技巧 4 遞迴 1 降低複雜性 2 避免 重複 3 限制改動帶來的影響 4 隱含順序 5 改進效能 6 進行集中控制 7 隱含資料結構 8 隱含指標操作 9 隱藏全域性變數 1 每乙個函式都必須...