虛函式與多型總結

2021-08-21 05:35:16 字數 2359 閱讀 4972

基礎知識:

多型性定義:多型性只乙個名字多種語義;或者是在相同的介面中,多種實現;

過載函式即為多型性的一種簡單形式;

虛函式允許函式呼叫與函式體的聯絡在執行時才進行,成為動態聯遍;

|虛函式和動態聯遍:

冠以關鍵字virtual的成員函式稱為虛函式;

實現執行時多型的關鍵首先是要說明虛函式,另外,必須用基類指標呼叫派生類的不同實現版本;

|虛函式與基類指標:

基類指標雖然獲取派生類物件位址,卻只可以訪問派生類從積累繼承的成員;

樣例:

#includeusing namespace std ;

class base

void who()

protected: char x;

} ;class first_d : public base

void who()

protected: char y;

} ;class second_d : public first_d

void who()

protected: char z;

} ;int main()

執行結果:

base class: a

base class: t

base class: e

first derived class: t.o

second derived class: e.n.d

注意:1、乙個虛函式,在派生類層介面相同的過載函式都保持虛特性;

2、虛函式必須是類的成員函式;

3、不能將友元說明為虛函式,但虛函式可以是另乙個類的友元;

4、析構函式可以是虛函式,但建構函式不能是虛函式;

虛函式的過載特性

1、在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、

引數型別和順序完全相同;

2、如果僅僅返回型別不同,c++認為是錯誤過載;

3、如果函式原型不同,僅函式名相同,丟失虛特性;

例:

class  base

;class derived : public base

;void g ( )

;

|虛析構函式:

建構函式不能是虛函式。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式。

析構函式可以是虛的。虛析構函式用於指引delete 運算子正確析構動態物件。

例:普通析構函式在刪除動態派生類物件的呼叫情況

#includeusing namespace std ;

class a

} ;class b : public a

} ;int main()

執行結果:

delete first object:

a::~a()is called.

deletesecond object:

b::~b()is called.

a::~a()is called.

說明:1.派生類應該從它的基類公有派生;

2.必須首先在基類中定義虛函式;

3.派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫;

4.一般通過基類指標訪問虛函式時才能體現多型性;

5.乙個虛函式無論被繼承多少次,保持其虛函式特性;

6.虛函式必須是其所在類的成員函式,而不能是友元函式,也不能是靜態函式;

7.建構函式、內聯成員函式、靜態成員函式不能是虛函式;

(虛函式不能以內聯的方式進行處理)

8.析構函式可以是虛函式,通常宣告為虛函式;

成員函式呼叫虛函式(採用動態聯遍):

#include using namespace std;

class a

virtual void show()= 0;

protected: int val;};

class hex_type : public number

void show() };

class dec_type : public number

void show() };

class oct_type : public number

void show() };

void fun( number & n ) // 抽象類的引用引數

int main()

純虛函式作用:

純虛函式是一種特殊的虛函式;

在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做;

虛函式與多型總結

多型性 polymorphism 是指乙個名字,多種語義 或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。冠以關鍵字 virtual 的成員函式稱為虛函式實現執行時多型的關鍵首先是要說明虛函式,另外,必須用。基類指標呼叫派生類的不同...

虛函式與多型總結

虛函式與多型性 1.多型性是指乙個名字,多種語義 或介面相同,多種實現。2.過載函式是多型性的一種簡單形式。3.虛函式允許函式呼叫與函式體的聯絡在進行時才進行,成為多型聯編。5.實現執行時多型的關鍵首先是要說明虛函式,另外,必須用基類指標呼叫派生類的不同實現版本 基類指標雖然獲取派生類物件位址,卻只...

多型與虛函式總結

多型性 polymorphism 是指乙個名字,多種語義 或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。冠以關鍵字 virtual 的成員函式稱為虛函式 實現執行時多型的關鍵首先是要說明虛函式,另外,必須用 基類指標呼叫派生類的不...