C 虛函式和純虛函式

2021-10-07 18:44:03 字數 1458 閱讀 5833

帶有virtual關鍵字修飾的函式就是虛函式。

class test

;

引入虛函式,是為了使用多型的特性(通過父類指標呼叫子類重寫的方法)。

案例1:沒有使用虛函式

class animal

;class cat : public animal

;

#include "animal.h"

#include using namespace std;

void animal::eat()

void cat::eat()

#include "animal.h"

void func(animal *animal)

int main(int argc, char *ar**)

執行結果:

i'm eating generic food.

i'm eating generic food.

結論:當父類函式不是虛函式時,通過父類指標呼叫函式時,只會呼叫父類中實現的方法。

案例2:將父類函式宣告為虛函式

只需要修改animal.**件,其他檔案不用修改。

class animal

;class cat : public animal

;

執行結果:

i'm eating generic food.

i'm eating rat.

結論:只有將父類函式宣告為虛函式,才可以通過父類指標呼叫子類中重寫的方法,也就實現了多型的特性。

純虛函式是在虛函式宣告的末尾加上=0即可;

純虛函式不能有函式體,有乙個例外就是純虛析構函式(純虛析構函式可以有函式體);

含有純虛函式的類為抽象類,不能被例項化,只能被子類繼承;

抽象類除了有純虛函式外,還可以有普通函式,並且普通函式必須要有函式體。

案例:

class animal

;class cat : public animal

;

#include "animal.h"

#include using namespace std;

void animal::run()

void cat::eat()

#include "animal.h"

void func(animal *animal)

int main(int argc, char *ar**)

執行結果:

i can run.

i'm eating.

c 虛函式和純虛函式

虛函式 定義 在基類中用virtual宣告,不一定不被實現,可以用基類的指標來呼叫子類的對應函式,實現成員函式的動態過載。子類virtual可寫可不寫,編譯器自動加上。1.以下繼承後的print 相當於重寫,兩個類print 方法輸出結果不同 class a 2.加了vitual 定義為虛函式以後,...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...