c 多型特性的小小總結

2021-07-23 03:03:43 字數 1779 閱讀 8458

多型是物件導向語言的重要特性,是指不同物件接收到同一訊息時會產生不同的行為。是處理類的層次結構之間以及同乙個類內部同名函式的關係問題。簡單地說,多型就是在同乙個類或繼承體系結構的基類與派生類中,用同名函式來實現不同的功能。多型的概念比較複雜,有多種意義的多型,乙個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。一般,我們使用多型是為了避免在父類裡大量過載引起**臃腫且難於維護。

重寫(覆蓋):兩個函式具有相同函式名,返回型別,參數列。

過載:函式或者方法有相同的名稱。

靜態多型性:採用靜態聯編的方式實現的多型,所謂靜態聯編是通過函式過載和運算子過載實現的。

動態多型性:通過繼承和虛函式,在程式執行時通過動態繫結實現的。

虛函式:我們知道當基類物件的指標指向派生類物件時,只能通過它訪問到派生類中的基類子物件。虛函式只能在類中定義,即只能把類的成員函式宣告為虛函式,不屬於任何類的普通函式不能被定義為虛函式。虛函式的執行機制可以概括為:如果基類中的非靜態成員函式被定義成為虛函式,且當派生類重寫了該函式,當通過指向基類物件的指標或引用呼叫派生類物件中的虛函式時,就會呼叫該指標(或引用)實際所指物件的成員函式。一旦將某個成員函式宣告為虛函式後,它在類的繼承體系中就永遠的為虛函式了。即派生類重寫該函式是並沒有把它宣告為虛函式,它仍然為虛函式。

普通例子:

#include 

using

namespace

std;

class a;

class b:public a

一種特殊形式:

#include 

using

namespace

std;

class b

virtual

void g()

};class d:public b

};int main()

虛析構函式:c++允許將析構函式定義為虛函式(建構函式不能使虛函式),在繼承體系結構中,如果基類的析構函式是虛函式,則所有的直接或間接從基類派生的類的析構函式都是虛函式。在銷毀通過基類指標和引用呼叫的派生類物件時,虛析構函式可以確保能夠徹底地物件占用的記憶體空間。在銷毀自由儲存空間中用new建立的物件時,虛析構函式可以確保在用delete銷毀動態分配的派生類物件時呼叫到正確的析構函式,完成物件所占用空間的**。典型情況是當用基類物件的指標或引用呼叫派生類物件時,如果基類析構函式不是虛函式,則通過基類指標或引用對派生類的析構很可能是不徹底的。

純虛函式與抽象類:抽象類是通過純虛函式來實現的。純虛函式在基類中宣告,但它在基類中沒有具體的函式實現**,要求繼承它的派生類提供函式實現**。在乙個類中可以宣告乙個或多個純虛函式,只要有純虛函式的類就是抽象類。抽象類只能作為其他類的基類,不能用來建立物件,所以又叫抽象基類。可以通過抽象類物件的指標或引用訪問到它的派生類物件,實現執行時的多型性。如果派生類只是簡單地繼承了抽象類的純虛函式,而沒有重現定義基類的純虛函式,則派生類也是乙個抽象類。

#include 

using namespace std;

class figure

virtual

void area() = 0;

};class ********:public figure

C 的多型特性

多型性 polymorphisn 是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話 允許將子類型別的指標賦值給父類型別的指標。多型包括靜態多型就是過載和動態多型覆蓋。這裡主要講動態多型。c 多型性是...

C 多型特性

編譯時多型性 靜態多型 通過過載函式實現 函式過載條件 形參的個數或資料型別不同 執行時多型性 動態多型 通過虛函式實現 產生多型條件 1 指向子類的基類指標2有 virtual 修飾的函式 3通過指標呼叫相應的虛函式 派生類的函式 遮蔽了與其同名的基類函式 如果派生類的函式與基類的函式同名,但是引...

C 特性之多型

今天學習了一下多型的有關知識。在 c primer 書中,多型特性似乎只在書的後半部分 oo 裡面提到。雖然是物件導向中很重要的乙個概念,但是並未單獨開出乙個章節來介紹。網上找了一些多型的介紹和程式,總結如下 其底層含義是大記憶體 父類 中套著許多小記憶體 子類 父類 class animal 子類...