C 中抽象類以及虛 純虛 析構函式的區別與介紹

2021-08-09 10:13:40 字數 1573 閱讀 2479

在某基類中宣告為 virtual 並在乙個或多個派生類中被重新定義的成員函式,用法格式為:virtual+函式返回型別+ 函式名(參數列) ;實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。

純虛函式是一種特殊的虛函式,在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做。這就是純虛函式的作用。用法格式virtual 《型別》《函式名》(《參數列》)=0;

####1、為了方便使用多型特性,我們常常需要在基類中定義虛函式。

####2、在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

###為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式。若要使派生類為非抽象類,則編譯器要求在派生類中,必須對純虛函式予以重寫以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。

##三、析構函式

以c++中,析構函式的命名也與類名相同,只是在函式名前面加乙個位取反符,例如t( ),以區別於建構函式。它不能帶任何引數,也沒有返回值(包括void型別)。只能有乙個析構函式,不能過載。如果使用者沒有編寫析構函式,編譯系統會自動生成乙個預設的析構函式(即使自定義了析構函式,編譯器也總是會為我們合成乙個析構函式,並且如果自定義了析構函式,編譯器在執行時會先呼叫自定義的析構函式再呼叫合成的析構函式),它也不進行任何操作。所以許多簡單的類中沒有用顯式的析構函式。

####在物件導向的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。

####抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。

####比如,在乙個圖形編輯軟體的分析設計過程中,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣乙個概念,形狀這個概念在問題領域並不是直接存在的,它就是乙個抽象概念。而正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠例項化的。

抽象類是為了抽象和設計的目的而建立的,處於繼承層次結構的上層。

#####(1)抽象類只能作為其他類的基類,不能建立抽象類物件。

#####(2)抽象類不可以用作定義引數的型別以及函式返回值型別或顯式轉換的型別。

#####(3)可以定義為指向抽象類的指標和引用,可以指向它的派生類,實現多型性。

多型 虛函式 虛析構函式 純虛函式和抽象類

一 多型 只對指標和引用有用 1 定義 多型是指當基類的指標 或引用 繫結到派生類物件上,通過此指標 或引用 呼叫基類的成員函式時,實際上呼叫到的是該函式在派生類中的覆蓋函式版本。2 多型的兩種表現形式 其實如果乙個基類中的乙個函式為虛函式的話,若其派生類中有同名的函式,但是沒有標明為虛函式的話,預...

C 虛函式,純虛函式,虛析構和純虛析構

c 虛函式 定義為虛函式是為了允許用基類的指標來呼叫子類的這個函式,是需要具體實現的 virtual void funtion1 c 純虛函式 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 vir...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...