C 學習筆記20190705 多型

2021-09-25 00:04:38 字數 1079 閱讀 5350

1)靜態多型 函式過載

2)動態多型 虛函式繼承關係

2靜態聯編

1)位址早繫結 編譯階段繫結好位址

3動態聯編

1)位址晚繫結,執行時候繫結好位址

4多型1)父類的引用或指標指向子類的物件

1)當父類中有了虛函式後,內部結構就發生了改變,內部多了乙個vfprt即virtual function pointer虛函式表指標

2)指向vtfable虛函式表

3)父類中結構體vtptr &animal::speak

4)子類中 進行繼承 會繼承 vfptr vftable

5)建構函式中 會將虛函式表指標 指向自己的虛函式表

6)如果發生了重寫,會替換掉虛函式表中的speak,改為&cat::speak

7)深入剖析內部到底如何呼叫的((void()()) ((int*)(int)animal))();

1)早期方法 是不利於擴充套件的

2)開發有原則 開閉原則 對擴充套件開放 對修改關閉

3)利用多型實現–利於後期擴充套件,結構性非常好,可讀性高,效率稍微低,內部結構複雜

1純虛函式寫法 virtual void func() = 0;

2抽象型別

3抽象類 不可例項化物件

4如果類 繼承了抽象類,必須重寫抽象類中的純虛函式

1 virtual ~類名(){}

2 解決問題:通過父類指標指向子類物件釋放時候不乾淨導致的問題

寫法virtual ~類名() = 0 .如果出現了純虛析構函式,這個類也算抽象類,不可以例項化

class animal

//普通析構 是不會呼叫子類的析構的,所以可能會導致釋放不乾淨

//利用虛析構來解決這個問題

//virtual ~animal()

// //純虛析構,需要宣告,還需要實現,類內宣告,類外實現

學習日誌 2019 07 05

public abstract final class 類名 extends 父類 implements 介面列表 修飾符 類名 引數列表 eg package eg1 public class ld 帶引數的建構函式 public employee string n,int a,double s ...

C 學習筆記 多型

引言 1.虛繼承 如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性。解決方案 虛繼承宣告,加乙個virtual 關鍵字 2.物件導向新需求 編譯器的做法不是我們期望的 如果用父類指標指向子類物件,再呼叫print 方法,均會呼叫父類中的p...

C 多型學習筆記

看了一堆介紹多型的東西,腦子裡就記得幾個概念了。靜態多型,又叫早繫結,動態多型,應該是叫晚繫結。多型的價值在於使程式更簡潔 更高效。no virtual no 多型,virtual means 已多型。不要覺得問題 很沒用 你還就是說不出來。同樣的命令,不同的物件,做出不同的動作。這就得借助the ...