純虛函式和抽象基類的使用

2021-08-11 11:55:09 字數 1051 閱讀 4493

最近在橫版格鬥遊戲製作分析的時候,遇到了純虛函式,特此記錄下來。收集了一些資料。

#pragma once

#include "cocos2d.h"

class ******dpad;

class ******dpaddelegate

;class ******dpad : public cocos2d::sprite

;

純虛函式

是一種特殊的虛函式,在許多情況下,在

基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的

派生類去做。這就是純虛函式的作用。

純虛函式是一種特殊的虛函式,它的一般格式如下:

class 《類名》 ;

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

純虛函式可以讓類先具有乙個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛函式,否則,派生類也變成了抽象類,不能例項化物件。

引入原因:

1、為了方便使用多型特性,我們常常需要在基類中定義虛函式。 2、

在很多情況下,基類本身生成物件是不合情理的

。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;)。若要使派生類為非抽象類,則編譯器要求在派生類中,必須對純虛函式予以重寫以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。

抽象基類不能例項化該類物件,但是該類的子類可以,只要子類不是抽象基類。

如果派生類沒有實現基類的純虛函式,也將因為繼承了抽象方法而成為抽象類。

上面的**還涉及到類的宣告和使用,******dpad類在******dpaddelegate類中有使用,需要提前宣告,如果不宣告就會報錯。

純虛函式和抽象基類

純虛函式的格式 virtual 型別 函式名 參數列 0 而我們的純虛函式經常被用來構建抽象基類。抽象基類 當我們僅想對基類進行向上型別轉換,使用它的介面,而不希望使用者實際地建立乙個基類的物件,那麼我們就在基類中加入至少乙個純虛函式 pure virtual function 來使基類稱為抽象 a...

純虛函式和抽象基類

純虛函式就是基類只定義了函式體,沒有具體的實現過程,必須在子類中加以實現。如果基類中含有乙個或多個純虛函式,那麼它就屬於抽象基類,不能被例項化。1 引入抽象基類和純虛函式的原因有以下兩點 1 為了方便的是使用多型特性 2 在很多情況下,基類本身生成物件是不合情理的。抽象基類不能夠被例項化,它定義的純...

虛基類 虛函式 純虛函式和抽象類

一 虛基類 在 多繼承 中講過的例子中,由類a,類b1和類b2以及類c組成了類繼承的層次結構。在該結構中,類c的物件將包含兩個類a的子物件。由於類a是派生類c兩條繼承路徑上的乙個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中只產生乙個基類子物件,則必...