C 多型學習筆記

2021-07-24 16:23:00 字數 1722 閱讀 3693

看了一堆介紹多型的東西,腦子裡就記得幾個概念了。靜態多型,又叫早繫結,動態多型,應該是叫晚繫結。

多型的價值在於使程式更簡潔、更高效。

no virtual no 多型,virtual means 已多型。

不要覺得問題「很沒用」,你還就是說不出來。同樣的命令,不同的物件,做出不同的動作。這就得借助the king of fighters來解釋了。同樣是「—>+b」的命令,草稚京發出來的是特殊技外式轟斧陽,而裡不知火舞發出來的是特殊技黑燕之舞。哈哈,這就是多型。

當然這是複雜一點的多型,另一種多型是指:相同的物件,不同的命令,做出不同的動作。很好理解嘛,同乙個拳皇98的人物,不同的按鍵方式發出的招式肯定不一樣啊,要是都一樣了,還玩個屁。

都是雷人的概念。接著文章開篇說,早繫結和晚繫結的區別(個人理解)是從main函式的**表現的,能只從main函式就判斷出被呼叫部分的就是早繫結,不能判斷出來的就稱之為晚繫結(這樣應該就可以理解我的另一篇部落格了)。換個理解方式吧,同一類族的不同類的物件或其指標在程式中呼叫了同乙個函式時,發生的就是晚繫結。而,簡單的就是早繫結(簡單在函式入口是固定的,進來的也只會是同一類人)!

動態多型必須以封裝和繼承為基礎。所以,動態多型至少涉及兩個類,基類和派生類。

換句話說,沒有繼承就沒有多型。

靜態繫結和動態繫結是需要「控制的」,虛函式的動態繫結難理解就在於控制細節被隱藏了,由編譯器自動處理了。如果讓你來設計這個控制過程你會如何設計呢?這就是下面虛函式表想解釋的。

多型的語法核心是virtual關鍵字,必須使用virtual才能使多個類間建立多型關係。

繼承中,父類和子類有同名函式時就會有隱藏隱藏是在學習繼承的時候就出現的概念。

覆蓋雖然也是父類和子類之間的關係,但是僅指虛函式的「同名情況」。或者直觀一點說,覆蓋是特別針對虛函式父子的隱藏。

基本認識:

有虛函式在記憶體中就有虛函式表;

大概有三個表,類的表—>虛函式表—>函式;

多型過程:

每個物件儲存乙份指向虛表的指標,當然還有物件的資料;

每個多型型別(就是每個類,即虛表按類分配而不是按物件,於是極大節省了記憶體空間)只有乙個虛表;

虛表存函式入口位址。

最後補充乙個多檔案結構的知識和記憶體洩漏的wiki:

巨集定義是為了避免.h檔案的重複包含而寫的(不過,我好想連什麼是重複包含都不懂)。否則,編譯會報錯重定義。c++ 'class' type redefinition

在電腦科學中,記憶體洩漏指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體。

C 學習筆記 多型

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

c 學習筆記 多型

這裡用乙個shape類 rectangle類 cirle類進行說明 virtual shape 虛析構函式 在動態申請空間時候 防止沒析構派生類 virtual double area 虛函式有藏的效果 virtual double zhouchang private double area dou...

C 學習筆記 多型

include iostream using namespace std 多型的思想 物件導向的三大概念 封裝 突破c函式的概念 用類做函式引數的時候可以使用物件的屬性和物件的方法 繼承 a b 復用 多型 可以使用未來 多型很重要 實現多型的三個條件 1 要有繼承 2 要有函式重寫 虛函式 vir...