15 6純虛函式與抽象類

2022-09-02 06:24:11 字數 762 閱讀 3428

純虛函式:virtual

1.問題的產生: 通過基類的指標刪除派生類物件時只呼叫基類的析構函式

例:class cson;

};class cgrandson : cson;

}int main()

2. 解決辦法: 

把基類的析構函式宣告為virtual,派生類的析構函式 virtual可以不進行宣告;

通過 基類的指標刪除派生類物件:

首先呼叫 派生類的析構函式 

然後呼叫 基類的析構函式 類如果定義了虛函式, 則最好將析構函式也定義成虛函式

例:1.

class son;

};class grandson : public son;

}; int main()

輸出結果:  bye from son                              

沒有執行grandson::~grandson()!!!

2.class son;

}; class grandson : public son;

};int main()

輸出結果: bye from grandson    bye from son

抽象類:含有純虛函式的類

*只能作為基類來派生

*不能建立物件

*抽象類指標或引用->其派生類的物件

*抽象類構造和析構函式不能呼叫純虛函式

*繼承類如果把基類(抽象類)裡所有的純虛函式全部實現,繼承類就不是抽象類了

純虛函式與抽象類

有時我們僅僅想讓基類表示一種抽象的概念,而不與具體的事物相聯絡 如 我在基類中定義乙個多邊形的函式shape 但是我並不想讓它指向某乙個具體的多邊形 三角形呀,四邊形呀 我只想讓它指明多邊形都共有的特徵 都有兩條以上的邊構成,都有角。然後在它的派生類中在對對變形進行具體化 這時便用到了純虛函式 純虛...

純虛函式與抽象類

一 純虛函式 在基類中宣告的虛函式在各派生類中根據實際需要給出各自定義。syntax virtual returntype functionname 參數列 0 宣告為純虛函式後,基類中就可以不再給出函式的實現部分,函式體由派生類給出。在基類中對純虛函式定義的函式體的呼叫,必須通過 基類名 函式名 ...

純虛函式與抽象類

1 純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本 2 純虛函式為各派生類提供乙個公共介面 介面的封裝設計 3 純虛函式說明形式 virtual 型別 函式名 參數列 0 4 乙個具有純虛函式的基類稱為抽象類。定義乙個抽象類,含有純虛函式類叫做抽象類。1 如果子...