C virtual關鍵字理解

2021-05-28 07:56:07 字數 809 閱讀 3984

在c++語言中,從**到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c++設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌;

inline很容易理解,生命為inline的函式在編譯階段即被展開成**,而非inline的函式採用執行時鏈結的方式處理;

vitual關鍵字,我只在這裡談三個地方的用途:

1、vitual基類

在多重繼承中,從派生類到基類存在多條路線時(多個繼承脈絡或者途徑),乙個這種派生類的物件例項化將包含多個基類物件,浪費資源且呼叫混亂的現象出現。因此引入了vitual baseclass,來在執行階段克服多個基類物件的產生。這個vitual是在執行階段保證物件唯一性的。

2.vitual函式

虛函式的出現,是由於基類的指標可以執行派生類,因此引出了不便,如

class deriv:public class base

當deriv d;

base* b;

b=&d;

b->show();

這裡的show應該呼叫誰的呢?我們的意思肯定是呼叫d的,但是編譯器處理的話b和base類是繫結在一起的,他實際上是會呼叫b的show函式。

因此,我們引入vitual函式,來告訴編譯器,出現這種情況時,在執行時動態鏈結進行處理。

3.vitual在純虛函式中使用

純虛函式完全是為了繼承體系的完整,也是整合vitual函式的作用而產生的。代表了編譯器階段物件的繫結,將呼叫選擇轉移到執行時動態繫結。

綜上:vitual關鍵的引入,可以理解為阻止編譯階段的靜態繫結,將繫結(虛函式)和約束工作(虛基類)轉移到執行時動態處理。

C virtual關鍵字理解

在c 語言中,從 到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c 設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌 inline很容易理解,生命為inline的函式在編譯階段即被展開成 而非inline的函式採用執行時鏈結的方式處理 vitual關鍵字,...

C virtual關鍵字理解

在c 語言中,從 到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c 設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌 inline很容易理解,生命為inline的函式在編譯階段即被展開成 而非inline的函式採用執行時鏈結的方式處理 vitual關鍵字,...

C virtual關鍵字的用法和宣告

virtual 關鍵字用於修改方法 屬性 索引器或事件宣告,並使它們可以在派生類中被重寫。例如,此方法可被任何繼承它的類替代 public virtual double area 虛擬成員的實現可由派生類中的替代成員更改。備註呼叫虛擬方法時,將為替代的成員檢查該物件的執行時型別。將呼叫大部分派生類中...