天天看點

C++程式設計-第14周 多态性與虛函數

【目的】

1. 掌握多态性的基本概念

2. 學會利用虛函數實作多态性

3. 學會在設計中利用純虛函數構造抽象基類

第一部分 閱讀程式

1、閱讀、修改和運作關于交通工具類的程式,回答問題,以了解相關技術方法

(1)請寫出程式的執行結果,并在上機時對照了解

請回答:當基類的指針指向派生類時,用指針調用同名成員函數,執行的是基類的成員函數,還是派生類的成員函數?為什麼會這樣?

(2)如果将vehicle類的定義修改為虛函數,其餘不變,請寫出程式的執行結果,并在上機時對照了解

請回答:當基類的指針指向派生類時,用指針調用同名虛成員函數,執行的是基類的成員函數,還是派生類的成員函數?為什麼會這樣?什麼是多态性?請結合本例的運作結果說明。

(3)如果将vehicle類的定義修改為純虛函數,找出main()函數中将使編譯出錯的行删除(或改為注釋),請寫出程式的執行結果,并在上機時對照了解

請回答:當基類同名成員函數定義為純虛函數後,發生了什麼現象?為什麼會這樣?

(4)送出博文,記錄實驗過程和結果,用自己的話回答上面提出的問題,概括你對虛函數、多态性和抽象類的了解。——不要忽視回答問題,寫出來,你會更明白。

2、閱讀下面的程式,并寫出運作結果

(1)

(2)

第二部分 實踐項目

【項目1】根據給出的基類animal和main()函數。

1、根據給出的main()函數和運作結果的提示,設計出相關的各個類,注意觀察運作結果,提取出每個類中需要的資料成員,并比對上需要的成員函數。

2、顯然,animal設計為抽象類更合适,animal不需要能夠執行個體化,是專門作基類使用的。改造程式,使animal設計為抽象類,這時main()函數中p = new animal();将出錯,将此行删除。

3、每一個animal的派生類都有一個“名字”資料成員,這一共有的成員完全可以由基類提供改造上面的程式,将這一資料成員作為抽象類animal資料成員被各派生類使用。

下面是給出的基類animal和main()函數:

下面是程式的運作結果:

C++程式設計-第14周 多态性與虛函數

【項目2】寫一個程式,定義抽象基類shape,由它派生出3個派生類,circle(圓形)、rectangle(矩形)、triangle(三角形)。用如下的main()函數,求出定義的幾個幾何體的面積和。 

【項目3】設計一個抽象類csolid,含有兩個求表面積及體積的純虛函數。設計個派生類ccube、cball、ccylinder,分别表示正方體、球體及圓柱體。在main()函數中,定義基類的指針p(csolid *p;),利用p指針,輸出正方體、球體及圓柱體對象的表面積及體積。

繼續閱讀