物件導向實驗(七) 多型性2

2021-10-23 07:43:42 字數 1788 閱讀 9069

基類型別物件入口索引子類物件

1.泛化的概念:由具體的,個別的擴大為一般的;將此概念應用於結構體和類物件,就是泛化能力。型別泛化指的是在繼承和派生時,基類派生出了很多不同的子類,形成了繼承樹,生成的子類都有自己獨特的性質,但是所有的子類都有自己的獨特性質,但是所有的子類都具有基類的性質,所以也可以看作是基類物件。

2.不同的子類物件都可以用基類指標索引到,但是如果用統一的方式索引到之後,遇到相同的函式入口,只會執行子類函式中的函式。也就是說,呼叫基類指標後,雖然指向的是派生類物件,但是呼叫的仍舊是基類的函式。如果想要呼叫派生類的話,應當將所有的同名函式設定為虛函式。

基類指標指向子類物件如何展現子類性質:虛函式

1.虛函式的概念:虛函式:在某基類中宣告為 virtual 並在乙個或多個派生類中被重新定義的成員函式。可以實現多型性。

2.動態繫結:虛函式和虛析構函式

含有虛函式的類要使用虛析構函式,否則容易導致派生類的資源無法釋放。

派生類的建構函式是先構造的基類的無名物件,析構的時候按照基類的型別析構。

所以也會呼叫小模組的析構函式。

當基類指標指向派生類物件時,加上virtual就可以呼叫派生類的析構函式去析構派生類物件。

3.抽象類和純虛函式

會發現有的類不需要產生物件,只是作為最頂層往下繼承,每乙個派生類的物件都是呼叫各自虛函式的函式體,因為基類裡虛函式的函式體可以忽略,變成了純虛函式,同時因為函式體不存在,也不能產生物件,變成了抽象類。

4.派生類建構函式執行的次序:

呼叫基類建構函式,呼叫順序按照它們被繼承時宣告的順序(從左到右);

呼叫內嵌成員物件的建構函式,呼叫順序按照它們在類中宣告的順序;

派生類的建構函式體中的內容。

**:

#include

#define pi 3.1415926

using

namespace std;

class

shape

shape

(int a,

int b)

:width

(a),

height

(b)void

set_values

(int a,

int b)

virtual

intarea()

=0;///純虛函式

~shape()

};class

circle

:public shape///圓

circle

(int a,

int b)

:shape

(a,b)

virtual

intarea()

};class

rectangle

:public shape///矩形

rectangle

(int a,

int b)

:shape

(a,b)

virtual

intarea()

~rectangle()

};class

********

:public shape///三角形

virtual

intarea()

~********()

};void

print_area

(shape& t1,shape& t2,shape& t3)

intmain()

輸出結果:

15030

3

物件導向的多型 多型性

多型指的是一類事物有多種形態,比如水有多種形態 冰 水 水蒸氣,但都是h2o,下面定義乙個h2o的父類和三種形態的子類 class h2o def init self,name,temperature self.name name self.temperature temperature deftu...

物件導向之多型 多型性

一 多型 多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abcclass animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態...

c 物件導向系列2(多型性)

c 多型性的定義 同一操作作用於不同的類的例項,不同的類將進行不同的理解,最後產生不同的執行結果。c 支援兩種型別的多型性 1 編譯時的的多型性。編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的引數,返回的型別等資訊決定實現何種操作。2 執行時的多型性。執行時的多型性就...