C 中實現多型的方法

2021-04-01 06:43:57 字數 851 閱讀 5672

c++實現多型的方法

在c++中,我們常說的多型有編譯時多型與執行時多型兩種。

編譯時多型是指由編譯器在編譯的過程中,尋找與之合適的函式,類模板等來生成相關的**。而執行是多型我們也常稱之為動態繫結(dynamic binding),這是在執行中由不同的物件來指定的。而這種動態繫結是c++提供的最有用的多型手段。

為什麼要用多型?

析構函式作為虛函式

在基類中,我們常常習慣把析構函式作為虛函式。這是因為這樣我們可以保證子類能夠正確地析構。我們看一下下面這個程式的例子:

class base

public:

base()

~base()

~child()

private:

char* m_data;

int main()

base* bp=new child();

delete bp;

return 0;

在這裡讀者有沒有看出錯誤?對,你看出來了,就是記憶體洩漏。在執行delete bp時,其實只執行了base類當中的析構函式,卻沒有執行子類的析構函式。因為我們這樣寫的話,只把bp當作了相應的base類來執行。

若我們在base類中的析構函式之前加入virtual關鍵字,那麼這一切都不會發生了。修改後,執行可以看中子類與基類的析構函式都有執行。這樣的話就保證了程式的正確性。

是不是虛函式就比較好?

也不是,虛函式在它執行的場合,如果不假思索就採用虛函式的話那麼程式的執行的速度將會很慢。因為動態繫結產生的程式所要執行的時間比一般的程式執行的時間要多一些。所以如果沒有必要的話,我們還是應該使用普通的函式而不是虛函式。

虛函式在程式的架構中有很大的作用,具體的實現方法看設計模式吧。

c 實現多型的方法

1 c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 ...

C 中多型的實現

物件導向語言的主要特點是 封裝性 繼承性 多型性。其中,封裝性使得 模組化,繼承性完成 的復用,多型實現介面的重用。在c 中,多型性是指具有不同功能的函式用同乙個函式名。即用同乙個函式名,呼叫不同內容的函式。下面主要從多型的實現分析c 中的多型。多型的實現有兩種方式 靜態聯編和動態聯編。系統在編譯的...

C 中的多型及多型的實現

c 中的多型分為靜多型和動多型兩種情況。靜多型是在編譯時就能確定呼叫函式的型別,包括過載和模板。動多型則是需要在執行時才能確定呼叫哪乙個函式。動多型的產生條件是需要在基類的指標指向派生類的物件,並呼叫派生類的函式。而要想呼叫派生類的函式,那麼基類裡這個函式應寫為虛函式。什麼是虛函式?所謂的虛函式就是...