一.純虛函式
virtual … = 0;
•形如
class 類名
; 的虛函式,稱為純虛函式或抽象方法
–class shape
;
•純虛函式可以不定義,但如果定義,必須寫在類的外部
–void shape::draw (void) const
•在基類的構造和析構函式中呼叫純虛函式,結果將是未定義的。
通常會在鏈結階段報告失敗。如果該純虛函式有定義,編譯器將在給出警告之後,選擇呼叫基類版本
一.純虛函式與抽象類
•至少包含乙個純虛函式的類稱為抽象類
–class abstract
virtual void bar (void)
virtual void hum (void) = 0;
};
•純虛函式因其所代表的抽象行為而無需或無法實現,包含此種函式的類亦因其所具有的一般性而表現出抽象的特徵
•抽象類往往用來表示在對問題進行分析、設計的過程中所得出的抽象概念,是對一系列看上去不同,但本質上相同的具體概念的抽象
二.抽象類不能例項化為物件
•無論是直接定義,還是通過new運算子,抽象類永遠不能例項化為物件
–shape shape (…); // 錯誤
–shape* shape = new shape (…); // 錯誤
–void show (shape shape); // 錯誤
–shape make (void); // 錯誤
三.抽象類的子類
•抽象類的子類如果不對基類中的全部純虛函式提供有效的覆蓋,那麼該子類就也是抽象類
–class a
;–class b : public a
void bar (int x, int y) // 沒有覆蓋a::bar,繼承之
};–class c : public b
// 覆蓋b中從a繼承的bar
};
一.面向抽象
•全部由純虛函式構成的抽象類稱為純抽象類或介面
•面向抽象程式設計,使得所有基於介面編寫的**,在子類被更替後,無需做任何修改或只需做很少的修改,就能在新子類上正確執行
–class animal
;–animal* animal = new cat (...); // dog, ox, sheep, ...
animal->eat ();
animal->run ();
animal->cry ();
純虛函式與抽象類
有時我們僅僅想讓基類表示一種抽象的概念,而不與具體的事物相聯絡 如 我在基類中定義乙個多邊形的函式shape 但是我並不想讓它指向某乙個具體的多邊形 三角形呀,四邊形呀 我只想讓它指明多邊形都共有的特徵 都有兩條以上的邊構成,都有角。然後在它的派生類中在對對變形進行具體化 這時便用到了純虛函式 純虛...
純虛函式與抽象類
一 純虛函式 在基類中宣告的虛函式在各派生類中根據實際需要給出各自定義。syntax virtual returntype functionname 參數列 0 宣告為純虛函式後,基類中就可以不再給出函式的實現部分,函式體由派生類給出。在基類中對純虛函式定義的函式體的呼叫,必須通過 基類名 函式名 ...
純虛函式與抽象類
1 純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本 2 純虛函式為各派生類提供乙個公共介面 介面的封裝設計 3 純虛函式說明形式 virtual 型別 函式名 參數列 0 4 乙個具有純虛函式的基類稱為抽象類。定義乙個抽象類,含有純虛函式類叫做抽象類。1 如果子...