虛函式可以在執行的過程中動態編聯,根據指標所指的物件,呼叫對應的函式
成為虛函式必須滿足兩個條件:
1.函式依賴於物件呼叫:因為虛函式是儲存在虛函式表中,有乙個虛函式指標指向虛函式表,要呼叫虛函式必須通過虛函式指標,虛函式指標是儲存在物件中的。
2.函式必須可定址,因為虛函式表中存放的是虛函式的入口位址
不能成為虛函式的函式
1.內聯函式:在內聯函式的呼叫點將其展開,不能產生函式符號,所以不能把它存入虛表
2.建構函式:只有在呼叫完建構函式之後才能生成物件,虛函式依賴於物件的呼叫,要是將建構函式設為虛函式的話就不能生成物件了
3.靜態函式:靜態函式依賴於類,不依賴於物件,所以不能存放在虛表中
可以設為虛函式的函式:
1.普通的成員函式
析構函式必須設為虛函式的情況:
基類指標指向了派生類的物件時,必須將基類的析構函式設為虛函式。
編譯器會將虛函式表的指標存放在物件例項中最前面的位置,通過物件例項的位址就可以得到虛函式指標的位址,通過遍歷虛函式指標就可以呼叫虛函式
·是結束標誌
參考blog主要看圖
主要包括單繼承無覆蓋、單繼承覆蓋、多重繼承、多重繼承有覆蓋的情況。
C 中的虛函式及其實現方式
首先看 不採用虛函式的情況 include stdafx.h include using namespace std class a void print class b public a int main 上述的兩次輸出均為 this is a 100 證明在不採用虛函式的基礎上,用父類的指標指向...
strtok函式及其實現
標頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當 strtok 在引數s 的字串中發現到引數delim 的分割字元時則 會將該字元...
strstr函式及其實現
判斷乙個字串裡面是否包含另外乙個字串 我們以字串為例 char str1 hello world char str2 world const char result strstr str1,str2 if result null printf 沒有找到 n else printf 找到了 n 我們先...