国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++純虛函數(shù)和抽象類詳解

2023-04-07 13:21 作者:c語言-小新  | 我要投稿

?在C++中,可以將虛函數(shù)聲明為純虛函數(shù),語法格式為:

virtual 返回值類型 函數(shù)名 (函數(shù)參數(shù)) = 0;

純虛函數(shù)沒有函數(shù)體,只有函數(shù)聲明,在虛函數(shù)聲明的結(jié)尾加上=0,表明此函數(shù)為純虛函數(shù)。

最后的=0并不表示函數(shù)返回值為0,它只起形式上的作用,告訴編譯系統(tǒng)“這是純虛函數(shù)”。

包含純虛函數(shù)的類稱為抽象類(Abstract Class)。之所以說它抽象,是因?yàn)樗鼰o法實(shí)例化,也就是無法創(chuàng)建對象。原因很明顯,純虛函數(shù)沒有函數(shù)體,不是完整的函數(shù),無法調(diào)用,也無法為其分配內(nèi)存空間。

抽象類通常是作為基類,讓派生類去實(shí)現(xiàn)純虛函數(shù)。派生類必須實(shí)現(xiàn)純虛函數(shù)才能被實(shí)例化。

純虛函數(shù)使用舉例:


?


運(yùn)行結(jié)果: The area of Cuboid is 2200 The volume of Cuboid is 6000 The area of Cube is 1350 The volume of Cube is 3375

本例中定義了四個(gè)類,它們的繼承關(guān)系為:Line --> Rec --> Cuboid --> Cube。

Line 是一個(gè)抽象類,也是最頂層的基類,在 Line 類中定義了兩個(gè)純虛函數(shù) area() 和 volume()。

在 Rec 類中,實(shí)現(xiàn)了 area() 函數(shù);所謂實(shí)現(xiàn),就是定義了純虛函數(shù)的函數(shù)體。但這時(shí) Rec 仍不能被實(shí)例化,因?yàn)樗鼪]有實(shí)現(xiàn)繼承來的 volume() 函數(shù),volume() 仍然是純虛函數(shù),所以 Rec 也仍然是抽象類。

直到 Cuboid 類,才實(shí)現(xiàn)了 volume() 函數(shù),才是一個(gè)完整的類,才可以被實(shí)例化。

可以發(fā)現(xiàn),Line 類表示“線”,沒有面積和體積,但它仍然定義了 area() 和 volume() 兩個(gè)純虛函數(shù)。這樣的用意很明顯:Line 類不需要被實(shí)例化,但是它為派生類提供了“約束條件”,派生類必須要實(shí)現(xiàn)這兩個(gè)函數(shù),完成計(jì)算面積和體積的功能,否則就不能實(shí)例化。

在實(shí)際開發(fā)中,你可以定義一個(gè)抽象基類,只完成部分功能,未完成的功能交給派生類去實(shí)現(xiàn)(誰派生誰實(shí)現(xiàn))。這部分未完成的功能,往往是基類不需要的,或者在基類中無法實(shí)現(xiàn)的。雖然抽象基類沒有完成,但是卻強(qiáng)制要求派生類完成,這就是抽象基類的“霸王條款”。

抽象基類除了約束派生類的功能,還可以實(shí)現(xiàn)多態(tài)。請注意第 51 行代碼,指針p 的類型是 Line,但是它卻可以訪問派生類中的 area() 和 volume() 函數(shù),正是由于在 Line 類中將這兩個(gè)函數(shù)定義為純虛函數(shù);如果不這樣做,51 行后面的代碼都是錯(cuò)誤的。我想,這或許才是C++提供純虛函數(shù)的主要目的。

關(guān)于純虛函數(shù)的幾點(diǎn)說明

1) 一個(gè)純虛函數(shù)就可以使類成為抽象基類,但是抽象基類中除了包含純虛函數(shù)外,還可以包含其它的成員函數(shù)(虛函數(shù)或普通函數(shù))和成員變量。

2) 只有類中的虛函數(shù)才能被聲明為純虛函數(shù),普通成員函數(shù)和頂層函數(shù)均不能聲明為純虛函數(shù)。如下例所示:




C++純虛函數(shù)和抽象類詳解的評論 (共 條)

分享到微博請遵守國家法律
佛学| 文安县| 杂多县| 正安县| 盐源县| 徐州市| 六盘水市| 社会| 江川县| 古交市| 岳池县| 定结县| 湘潭市| 中宁县| 华蓥市| 图片| 黎城县| 宝山区| 武隆县| 万盛区| 永胜县| 尤溪县| 崇仁县| 阜南县| 茌平县| 攀枝花市| 辉南县| 遂溪县| 雷州市| 新密市| 灵石县| 信宜市| 永川市| 大理市| 临潭县| 兴化市| 依安县| 南陵县| 张家港市| 当阳市| 贵南县|