*多型性是指乙個名字,多種語義;或介面相同,多種實現。
*過載函式是多型性的一種簡單形式。
*虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。
*基類指標雖然獲取派生類物件位址,卻只能訪問派生類從基類繼承的成員。
示例如下:
#includeusing namespace std ;
class base
void who()
protected: char x;
} ;class first_d : public base
void who()
protected: char y;
} ;
注意:
*
乙個虛函式,在派生類層介面相同的過載函式都保持虛特性虛函式必須是類的成員函式;
*不能將友元說明為虛函式,但虛函式可以是另乙個類的友元;
*析構函式可以是虛函式,但建構函式不能是虛函式。
*在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、
引數型別和順序完全相同;
*如果僅僅返回型別不同,c++認為是錯誤過載;
*如果函式原型不同,僅函式名相同,丟失虛特性。
示例如下:
class base
;class derived : public base
;void g ( )
*建構函式不能是虛函式。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式;
*析構函式可以是虛的。虛析構函式用於指引 delete 運算子正確析構動態物件。
示例1(普通析構函式在刪除動態派生類物件的呼叫情況):
#includeusing namespace std ;
class a
} ;class b : public a
} ;int main()
示例2(虛析構函式在刪除動態派生類物件的呼叫情況):
#includeusing namespace std ;
class a
} ;class b : public a
} ;int main()
1.純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義, 要求任何派生類都定義自己的版本;
2.純虛函式為各派生類提供乙個公共介面;
3.純虛函式說明形式:
virtual 型別 函式名(參數列)= 0 ;
4.乙個具有純虛函式的基類稱為抽象類。
示例(簡單圖形類):
class figure
virtual void show_area() = 0 ;
};class ******** : public figure
{ public :
void show_area()
{ cout<<"******** with high "《虛函式與多型能夠根據成員函式型別的不同而做出不同的操作動作,這一點大大增加了程式的多樣性和指向性。多型可是理解為是對於相同介面的不同的實現方式與操作方式;而多型對於深入的應用設計有分層指向的功能,尤其是對於層次化需求很突出的程式,對於不同的層次,尋找其中的共性,從而將各個層次連線起來,實現程式的穩定化。
總之,接下來的學習,我要盡可能全面的掌握虛函式與多型的應用,完善自己的能力。
C 程式設計 虛函式與多型
在 c 程式設計思想 一書中對虛函式的實現機制有詳細的描述,一般的編譯器通過虛函式表,在編譯時插入一段隱藏的 儲存型別資訊和虛函式位址,而在呼叫時,這段隱藏的 可以找到和實際物件一致的虛函式實現。我們在這裡提供乙個 c 中的實現,模仿 vtable 這種機制,但一切都需要我們自己在 中裝配。之前在網...
C 虛函式與多型
1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...
c 多型與虛函式
多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示 include using namespace std class sha...