純虛函式: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 如果子...