C 物件導向知識點十二 多型

2021-08-26 02:46:37 字數 1769 閱讀 6910

物件導向的三大特性:封裝性是基礎,繼承性是關鍵,而多型性是補充。

多型是建立在虛函式的基礎之上的。

靜態多型:函式過載,運算子過載,函式模板和類模板

動態多型:也稱為執行時多型,即在程式執行時刻才能決定的東西。

靜態聯編:聯編出現在編譯連線階段,又稱為早期聯編,以實現靜態多型。

動態聯編:程式中若出現函式呼叫,但在編譯階段無法確定呼叫哪乙個函式,而只有到了程式的執行階段才能確定呼叫哪乙個函式,又稱為滯後聯編、晚期聯編。動態聯編技術是通過虛函式實現的。

虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。程式想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結

1)當基類中把成員函式定義為虛函式後,在其派生類中的虛函式必須與基類中的虛函式同名,且函式的引數個數、引數型別必須一致。

2)基類中的虛函式前的關鍵字virtual不能預設,派生類中的虛函式前的關鍵字virtual是可以預設的。

3)動態多型必須通過基類物件的引用基類物件的指標呼叫虛函式才能實現。

4)虛函式不能是友元函式、靜態成員函式、內聯函式。

5)建構函式不能定義為虛函式,析構函式可以定義為虛函式,也建議將析構函式定義為虛函式,以便實現撤銷物件時的多型性。

6)在一般成員函式中呼叫虛函式,遵循動態多型規則;但在建構函式中呼叫虛函式,不會遵循動態多型規則,即呼叫的是類自身的虛函式。

class point

virtual double area() // 虛函式1

};class rectangle: public point

virtual double area() // 虛函式2

};class circle: public point

virtual double area() // 虛函式3

};double calcarea(point &p)

int main()

輸出結果: 

virtual 《資料型別》 《函式名》 (《引數》) = 0;
=0 表明該定義中沒有函式體,這與將虛函式定義成空函式是有區別的:

virtual 《資料型別》 《函式名》 (《引數》)

上述定義中的函式體為,表示在函式體內部做任何工作。

若想要在基類中定義虛函式,以便在派生類中重新定義該函式更好地適用於物件,但是在基類中又不能對虛函式給出有意義的實現,這個時候就會用到純虛函式

class shape

// pure virtual function

virtual int area() = 0;

};

含有純虛函式的類稱為抽象類。

抽象類只能做派生類的基類,不能定義抽象類的物件

若派生類實現了基類所有的純虛函式,則派生類就不再是抽象類,若沒有實現基類所有的純虛函式,派生類依然是抽象類。

一般來說,純虛函式沒有函式體。但從語法的角度上純虛函式可以給出函式體。

物件導向知識點總結

1 物件導向的特徵 物件導向的三個基本特徵是 封裝 繼承 多型。封裝 也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。繼承 物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需...

物件導向相關知識點

在了解物件導向程式設計之前首先要先了解程式設計中兩大思想 面向過程 物件導向 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候再乙個乙個的依次呼叫就可以了。舉個栗子 將大象裝進冰箱,面向過程做法 開啟冰箱門 大象裝進去 關上冰箱門 面向過程,就是按照我們分析好了的...

多型知識點

多型知識點總結如下 1 含有純虛函式的類稱為抽象類 2 抽象類不可以實現例項化 3 繼承抽象類的函式如果沒有實現所有的純虛函式也為抽象類 4 純虛函式的實現格式 virtual void print 0 5 繼承類在實現純虛函式時,可以略去關鍵字virtual,但一般建議必寫 便於維護 6 乙個虛函...