C 中虛函式和純虛函式的區別

2021-10-12 11:24:43 字數 1179 閱讀 7207

c++物件導向程式設計有三大思想:抽象、繼承、多型

其中多型的實現建立在子類繼承父類的基礎上,它是由c++編譯器的乙個核心技術實現,即動態繫結技術。其核心思想是父類物件呼叫子類物件的方法。而父類物件呼叫子類物件的方法時,這個被呼叫的方法必須在父類中宣告為虛函式,因此虛函式是實現多型的乙個中介。而純虛函式是將父類上公升為乙個抽象類,抽象類無法例項化,只有方法的宣告,其實現由其子類完成。就像動物無法例項化為具體的物件,而老虎、獅子都可以繼承動物的特性(即父類的介面),從而有自己的例項化物件。

以下是虛函式和純虛函式的區別點:

1、類如果宣告了虛函式,這個函式是實現了的,即使是空實現,它的作用就是為了能讓這個函式在它的子類裡面可以被覆蓋,這樣編譯器就可以使用動態繫結來達到多型的目的(即父類指標指向子類物件,呼叫子類方法)。而純虛函式只是在基類中的乙個函式定義,即是乙個函式宣告而已,具體的實現需要留到子類當中。

2、虛函式在子類裡面也可以不進行重寫(只有虛方法和抽象方法才能夠被重寫);但純虛函式必須在子類去實現。

3、虛函式的類用於「實作繼承」,也就是說繼承介面的同時也繼承了父類的實現。當然,子類也可以進行覆寫,從而完成自己關於此函式的實現。純虛函式的類用於「介面繼承」,即純虛函式關注的是介面的統一性,實現由子類去完成。

4、帶純虛函式的類叫做抽象類,這種類不能直接生成物件,而只有被繼承,並重寫其虛函式後,才能使用。

**示例:

#include

using

namespace std;

// 抽象類

class

base

;class

child1

:public base

// 覆寫父類的純虛函式};

class

child2

:public base

// 覆寫父類的純虛函式};

intmain()

**輸出:

it's child 1

it's child 2

總結:

虛函式和純虛函式都是為了多型這一特性而服務的,不同的點是純虛函式將父類上公升為乙個抽象類,無法例項化物件,只有介面宣告,而其子類需要去實現父類中的宣告,這就統一了介面,只需要使用父類指標,指向具體的子類物件,去呼叫相應的虛方法即可。

謝謝閱讀

C 虛函式和純虛函式的區別

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

虛函式和純虛函式的區別

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

虛函式和純虛函式的區別

a.編譯時 多型性 通過 過載函式實現 b執行時 多型性 通過虛函式實現。首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,...