C 中的多型

2021-08-21 21:59:37 字數 875 閱讀 8667

函式重寫:在子類中定義與父類中原型相同的函式,函式重寫只發生在父類與子類之間

函式過載與重寫的區別:過載:同乙個作用域;子類無法過載父類函式,父類同名函式將被覆蓋;過載是在編譯期間根據引數型別和個數決定;重寫:發生於父類、子類之間;父類和子類函式有相同的函式原型;使用virtual關鍵字宣告後能夠產生多型;執行期間根據具體物件型別決定呼叫的函式。

多型成立的條件:要有繼承;要有虛函式重寫;用父類指標(引用)指向子類物件;

虛析構函式:通過父類指標釋放子類資源;

多型原理:當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表;虛函式表是乙個儲存類成員函式指標的資料結構;虛函式表是由編譯器自動生成與維護的;virtual成員函式會被編譯器放入虛函式表中;當存在虛函式時,每個物件中都有乙個指向虛函式表的指標(c++編譯器給父類物件、子類物件提前布局vptr指標;當進行函式呼叫時,c++編譯器不需要區分子類物件或者父類物件,只需要再base指標中,找vptr指標即可。);vptr一般作為類物件的第乙個成員。

建構函式中無法實現多型:構造的順序是先構造父類、再構造子類,當呼叫父類的建構函式的時候,虛函式指標vfptr 指向父類的虛函式表,當父類構造完,呼叫子類的建構函式的時候,虛函式指標 vfptr 指向子類的虛函式表。

不要用父類指標指向子類陣列:指標也是一種資料型別,c++類物件的指標p++/--,仍然可用。指標運算是按照指標所指的型別進行的。父類p++與子類p++步長不同;不要混搭,不要用父類指標++方式操作子類物件陣列。

純虛數和抽象類:純虛數是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本。純虛函式為各派生類提供乙個公共介面(介面的封裝和設計,軟體的模組功能劃分)。虛函式的說明形式:virtual  型別  函式名(參數列)=0。乙個具有純虛函式的類叫做抽象類,不可以建立抽象類的物件。

C 中的多型

封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...

C 中的多型

c 中的多型分為靜多型和動多型 也就是靜態繫結和動態繫結兩種現象 靜動的區別主要在於這種繫結發生在編譯期還是執行期,發生在編譯期的是靜態繫結,也就是靜多型 發生在執行期的則是動態繫結,也就是動多型。一 靜多型可以通過模板和函式過載來實現,下面舉兩個例子 1 函式模板 template t max c...

C 中的多型

定義 同樣的訊息被不同型別的物件接收時產生不同的行為。原理 1.編譯時多型 靜態繫結 2.執行時多型 動態繫結 分類 1.過載 包括函式過載,運算子過載 靜態繫結 2.覆蓋 包括子類和父類間虛函式 虛析構函式和純虛函式 動態繫結 要求 1.函式名相同 2.引數不同 栗子 include using ...