018 linuxC 之 抽象類的引入

2021-10-01 16:31:21 字數 2149 閱讀 3535

(二)

抽象類在介紹抽象類之前,我們先介紹一下純虛函式。

1.純虛函式

在基類中僅僅給出宣告,不對虛函式實現定義,而是在派生類中實現。這個虛函式稱為純虛函式。普通函式如果僅僅給出它的宣告而沒有實現它的函式體,這是編譯不過的。純虛函式沒有函式體。

純虛函式需要在宣告之後加個=0;

class    基類

;

2.抽象類

含有純虛函式的類被稱為抽象類。抽象類只能作為派生類的基類,不能定義物件,但可以定義指標。在派生類實現該純虛函式後,定義抽象類物件的指標,並指向或引用子類物件。

1)在定義純虛函式時,不能定義虛函式的實現部分;

2)在沒有重新定義這種純虛函式之前,是不能呼叫這種函式的。

抽象類的唯一用途是為派生類提供基類,純虛函式的作用是作為派生類中的成員函式的基礎,並實現動態多型性。繼承於抽象類的派生類如果不能實現基類中所有的純虛函式,那麼這個派生類也就成了抽象類。因為它繼承了基類的抽象函式,只要含有純虛函式的類就是抽象類。純虛函式已經在抽象類中定義了這個方法的宣告,其它類中只能按照這個介面去實現。

3.介面和抽象類的區別

1)c++中我們一般說的介面,表示對外提供的方法,提供給外部呼叫。是溝通外部跟內部的橋梁。也是以類的形式提供的,但一般該類只具有成員函式,不具有資料成員;

2)抽象類可以既包含資料成員又包含方法。

(三)示例

#include

#include

#include

using namespace std;

class human

virtual human*

test

(void)}

;class englishman : public human

// void wearing(void)

virtual ~

englishman()

virtual englishman*

test

(void)}

;class chinese : public human

void

wearing

(void

)void

driving

(void

) virtual ~

chinese()

virtual chinese*

test

(void)}

;int

main

(int argc,

char

**ar**)

(四)在子類中沒有編寫存虛函式的,可在派生類中編寫,這樣可以編譯通過

C 之抽象類

當乙個類繼承乙個抽象類卻沒有實現抽象類中的抽象方法時,此繼承類必須為抽象類 using system using system.collections.generic using system.linq using system.text namespace abstract test public...

java之抽象類

1 抽象類概念 抽象類前使用abstract關鍵字修飾,則為抽象類 2 抽象類的應用場景 a 在某些情況下,乙個父類只知道其子類應該包含某些方法,但是不能確切的知道如何實現這些方法 b 從多個具有相同特徵的類中抽象出乙個抽象類,以這個類作為子類的模板,從而避免了子類設計的隨意性 3 作用 限制規定子...

java之抽象類

分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能宣告相同,但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是乙個抽象方法。比如我們要宣告乙個人類class,人類包含很多種,美國人和中國人。那麼人類肯定會說話,但是說的是英語還是漢語需...