虛函式與純虛函式用法與區別

2021-08-07 04:48:45 字數 1856 閱讀 3483

絕大多數內容**網上

如果不需要基類對派生類及物件進行操作,則不能定義虛函式,因為這樣會增加記憶體開銷.

類裡定義虛函式a時,編譯器會給類新增乙個虛函式表【存放虛函式a的指標】,這樣就會增加類的儲存空間

【?】只有當乙個類被用來作為基類的時候,才把析構函式寫成虛函式.

(1)

基類中的

析構函式不是虛函式

成員函式不是虛函式

#include "stdafx.h"

#include

using

namespace

std;

class cbase;

~cbase() ;

void show() ;

};class cderived : public cbase;

~cderived() ;

void show() ;

};int main()

執行結果:

派生類show函式

派生類析構函式

基類析構函式

(2)

基類中的

析構函式不是虛函式

成員函式是虛函式

改動:

(1)virtual

void show() ;

(2)cbase *p = new cderived;

基類構造

派生類構造

派生類show函式

派生類析構函式

基類析構函式

(4)

基類中的

析構函式是虛函式

成員函式是虛函式

將上面例子中的cbase *p改為cderived *p

//cderived *p = new cderived;

cbase *p = new cderived;

執行結果一樣:

基類構造

派生類構造

派生類show函式

派生類析構函式

基類析構函式

虛函式與純虛函式用法與區別

txt

1.c++虛函式與純虛函式用法與區別,.虛函式和純虛函式可以定義在同乙個類(class)中,含有純虛函式的類被稱為抽象類(abstract class),而只含有虛函式的類(class)不能被稱為抽象類(abstract class)。

2.虛函式可以被直接使用,也可以被子類(sub class)過載以後以多型的形式呼叫,而純虛函式必須在子類(sub class)中實現該函式才可以使用,因為純虛函式在基類(base class)只有宣告而沒有定義。

3.虛函式和純虛函式都可以在子類(sub class)中被過載,以多型的形式被呼叫。

4.虛函式和純虛函式通常存在於抽象基類(abstract base class -abc)之中,被繼承的子類過載,目的是提供乙個統一的介面。

5.虛函式的定義形式:virtual

純虛函式的定義形式:virtual = 0;

在虛函式和純虛函式的定義中不能有static識別符號,原因很簡單,被static修飾的函式在編譯時候要求前期bind,然而虛函式卻是動態繫結(run-time bind),而且被兩者修飾的函式生命週期(life recycle)也不一樣。

6. 如果乙個類中含有純虛函式,那麼任何試圖對該類進行例項化的語句都將導致錯誤的產生,因為抽象基類(abc)是不能被直接呼叫的。必須被子類繼承過載以後,根據要求呼叫其子類的方法。

C 虛函式與純虛函式用法與區別

最開始學習c 的一點資料,忘了 位址了,覺得歸納的不錯,侵刪!1.虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2.虛函式可以被直接使用,也可以被子類 s...

C 虛函式與純虛函式用法與區別

1.虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2.虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的形式呼叫,而純虛函式必須在子...

C 虛函式與純虛函式用法與區別

1.虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2.虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的形式呼叫,而純虛函式必須在子...