多型性與虛函式 物件導向程式設計

2021-10-16 17:46:30 字數 2895 閱讀 6499

多型性:向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同 的行為。

靜態多型性:由函式中在和運算子過載形成。

動態多型性:通過虛函式實現。

先建立乙個point類,包含資料成員x,y(座標點)。以它為基類,派生出乙個circle(圓)類,增加資料成員r(半徑),再以circle類為直接基類,派生出乙個cylinder(圓柱體)類,再增加資料成員h(高)。要求編寫程式,過載運算子「<<",">>",使之用於輸出一上類物件。

宣告類point

#include

using

namespace std;

class

point

//讀x座標,getx函式為常成員函式

float

gety()

const

friend ostream&

operator

<<

(ostream&

,const point&);

//友元過載運算子<<

protected

:float x,y;};

point::

point

(float a,

float b)

//對x,y初始化

void point::

setpoint

(float a,

float b)對x,y賦值

ostream&

operator

<<

(ostream&output,

const point&p)

宣告派生類circle

class

circle

:public point

;circle::

circle

(float a,

float b,

float r)

:point

(a,b)

,radius

(r)//定義建構函式,對圓心座標和半徑初始化

void circle::

setradius

(float r)

//設定半徑值

float circle::

getradius()

const

//讀取半徑

float circle::

area()

const

//計算面積

ostream&

operator

<<

(ostream&output,

const circle&c)

//過載運算子

派生類物件可以代替基類物件的引用初始化或賦值

宣告circle的派生類cylinder

class

cylinder

:public circle

cylinder::

cylinder

(float a,

float b,

float r,

float h)

:circle

(a,b,r)

,height

(h)void cylinder::

sethight

(float h)

float cylinder::

gethight()

const

float cylinder::

area()

const

float cylinder::

volume()

const

ostream&

operator

<<

(ostream&output,cylinder&cy)

cylinder類中定義的area函式與circle類中的area函式同名,且函式型別、引數個數相同,屬於同名覆蓋。

在函式最左邊加乙個關鍵字virtual

virtual

void

display()

;

作用:

虛函式使用方法

在基類中用virtual宣告成員函式為虛函式,在類外定義虛函式時不必再加virtual

在派生類重新定義此函式,函式名、函式型別、函式引數個數和型別必須與虛函式相同。

通過指標變數呼叫此虛函式,此時呼叫的就是指標變數指向的物件的同名函式。

虛函式處理的是不同派層次上的同名函式的問題,理解為縱向過載。

靜態動態關聯

靜態關聯:在編譯時即可確定其呼叫的虛函式屬於哪一類。

動態關聯:在執行階段,基類指標變數指向了某乙個類的物件,然後通過此指標變數呼叫該物件的函式。

純虛函式:只有函式名字而不具備函式的功能,不能被呼叫。在這裡宣告乙個虛函式,留待派生類中定義。

一般形式:

virtual 函式型別 函式名(參數列)=0;

virtual

float

area()

const=0

;

抽象類:往往有一些類不用來生成物件。定義這些類的唯一目的是用它作為基類去建立派生類。

示例:

class

shap

virtual

float

volume

()const=0

};

C 物件導向程式設計 多型性和虛函式

多型 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為 即方法 訊息,就是指呼叫函式 多型性分為兩類 靜態多型和動態多型。靜態多型是通過函式的過載實現的,動態多型的特點是 不在編譯時確定執行那個程式,而是在程式執行的過程中才確定操作所針對的物件。執行時多型,是通過虛函式實現的 即如果通...

物件導向程式設計 多型性

include iostream using namespace std class b0 int main 輸出 b1 display d1 display 示例3 include using namespace std class b0 基類b0宣告 void main 主函式 輸出 b0 di...

虛函式與多型性

實驗內容 定義基類base,其資料成員為高h,定義成員函式disp 為虛函式,由基類派生出長方體類和圓柱類,並在兩個派生類中定義成員函式disp 為虛函式。在主函式中,用基類base定義指標p,用指標p動態呼叫虛函式disp 顯示面積。虛函式 它是基類中的成員函式,並在派生類中被過載。派生類中的虛函...