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 ...