C 中的多型

2021-08-13 23:47:24 字數 2082 閱讀 2769

今天我想給自己寫點東西

最近感覺遇到了瓶頸,部落格也有一段時間沒有更新了,這段時間很迷茫很困惑,感覺不知道如何去學c++了,也沒有了當初的那種熱情。學習c++也有一段時間了,當自己想要去實現乙個專案的時候才發現自己的不足,沒有頭緒,完全不知從何下手。然後就這樣渾渾噩噩的度過了一段時間。有時候也在想自己是不是不適合程式設計,後來也想通了,自己下定決心要做的事難道就這麼放棄了嗎?這不是我!加油吧!!!

1.1.對c++多型的理解:

如果有幾個似而不完全相同的物件,有時我們要求在向它們發出同乙個訊息時,它們的反應各自不同,分別執行不同的操作。這種現象就是多型現象。

舉個例子:abc3個班是高三年級,他們有基本相同的屬性和行為,在同時聽到上課鈴聲的時候,他們會分別走向3個不同的教室,而不會走向同乙個教室。

多型的意義:

由繼承而產生的相關的不同的類,其物件對同一訊息做出的不同響應。(能增加程式的靈活性,可減輕系統公升級,維護,除錯的工作量和複雜度)

1.2.多型實現的前提:

賦值相容:需要積累物件的任何地方都可以使用公有派生類的物件來替代。賦值相容是一種預設行為,不需要任何的顯示轉化步驟。

賦值相容中所指的替代包括以下幾種情況:

1、派生類的物件可以賦值給基類物件。

2、派生類的物件可以初始化基類的引用。

3、派生類物件的位址可以賦給指向基類的指標。

在替代之後,派生類物件就可以作為基類的物件使用,但只能使用從基類繼承的成員。

#include 

using namespace std;

class shape

void draw()

;class circle:public shape

void draw()

;int main()

1.3.多型形成的條件

1.3.1.靜多型,通過命名傾棧在編譯階段決定(函式過載)

1.3.2.動多型,在執行階段決定,不是在編譯階段決定。

1.4.虛函式

格式

class 類名

;

虛函式小結

1.在基類中用virtual宣告成員函式為虛函式,類外實現虛函式時,不用再加vritual。

2.在派生類中重新定義此函式稱為覆寫,要求函式名、返回型別、函式引數個數及型別全部匹配。並根據派生類的需要重新定義函式體。

3.當乙個成員函式被宣告為虛函式後,其派生類中完全相同的函式(顯示的寫出)也為虛函式。可以在其前加virtual以似清晰。

4.定義乙個指向基類物件的指標,並使其指向其子類的物件,通過該指標呼叫虛函式,此時呼叫的就是指標變數指向物件的同名函式。

純虛函式

**格式**

class 類名

舉個勺子

shape類中

virtual void draw() = 0;

circle類中

void draw()

測試

int main()

純虛函式小結

1.含有純虛函式的類稱為抽象基類,不可例項化(即不能建立物件)。存在的意義就是被繼承,提供公共介面

2.純虛函式只有宣告,沒有實現。

含有虛函式的析構

含有虛函式的類,析構函式也應該宣告為虛函式。在delete分類指標的時候,會呼叫類的析構函式,實現完整析構。

C 中的多型

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

C 中的多型

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

C 中的多型

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