虛函式與純虛函式

2021-08-28 13:46:29 字數 1356 閱讀 6913

c++中的虛函式是實現執行多型的重要工具。關鍵字為virtual。

下面程式中定義了基類base和派生類deriv,派生類中有與基類中的同名函式print().如果定義乙個基類指標,但是將其指向派生類物件。那麼將指標的型別,呼叫基類中的print()函式。

#include

using namespace std;

class base };

class deriv : public base };

intmain()

輸出為base!!

下面程式中,定義了基類base和派生類deriv1和deriv2,不過在基類中用virtual關鍵字對print函式進行了修飾,使之成為了虛函式,只要在基類中新增了virtual,子類中的同名函式自然也就是虛函式了。

#include

using namespace std;

class base };

class deriv1 : public base };

class deriv2 : public base };

intmain()

輸出:

deriv1!!

deriv2!!

同樣是果定義乙個基類指標,但是將其指向派生類物件,由於是虛函式,將在程式執行時,根據指向的物件,分別呼叫子類中的print()函式。

在基類中用virtual關鍵字修飾函式,並且申明其= 0。這就定義了純虛函式。包含純虛函式的類稱為抽象類,抽象類沒有具體的物件。因此,下面的程式實際上在編譯的時候是報錯的,error: invalid new-expression of abstract class type 『base』

class base 

;int

main()

在子類中應當對純虛函式進行具體的實現。如果在子類中,沒有對純虛函式的具體實現,相當於子類直接將純虛函式繼承過來,那麼子類還是乙個抽象類,依舊不能new出物件。

class base 

;class deriv : public base };

intmain()

```當子類成員函式的申明和實現分開時,可以在純虛函式申明之後加override關鍵字,強制保證純虛函式的實現。

```class base

;class deriv : public base

;void deriv:

:print()

intmain()

```

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...

虛函式與純虛函式

參考 虛函式 比如 virtual void function1 virtual關鍵字修飾的 成員函式 就是虛函式。把基類的成員函式 設為virtual,其 派生類的相應的函式也會自動變為虛函式。指向 基類的指標在操作它的 多型類物件時,會根據不同的類物件,呼叫其相應的函式,這個函式就是虛函式。純虛...

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...