C 程式設計之虛函式與多型

2021-08-21 06:37:38 字數 2018 閱讀 5841

*多型性是指乙個名字,多種語義;或介面相同,多種實現。

*過載函式是多型性的一種簡單形式。

*虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。

*基類指標雖然獲取派生類物件位址,卻只能訪問派生類從基類繼承的成員。

示例如下:

#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...