C 虛函式實現多型,常見問題總結

2021-10-06 09:13:27 字數 1403 閱讀 3708

1.使用virtual時,只在成員函式的宣告中新增virtual,在成員函式的實現中不要加virtual,示例如下:

father.h

class

father

father.cpp

int father::

val(

)

2.如果在子類中重寫虛函式,建議加上virtual,和override,方便可讀和排錯!

注意:重寫虛函式時,函式原型必須保持一致,如基類為int型別,那麼子類重寫時也必須為int型別!

father.h

class

father

son.h

class

son:

public father

son.cpp

int son::

val(

)

3.final,用來修飾類,讓該類不能被繼承,有點像葉問1、葉問2、葉問3、葉問4,到4就終結了,沒有下一部。

class

yewen1

class

yewen2

:public yewen1

class

yewen3

:public yewen2

class

yewen4 final:

public yewen3

4.為了防止記憶體洩漏,最好在基類析構函式上新增virtual,使基類函式為虛構函式,目的在於,當使用delete釋放類指標時,會實現動態的析構:

如果基類指標指向的是基類物件,那麼呼叫基類的析構函式;

如果基類指標指向的是子類物件,那麼先呼叫子類的析構函式,再呼叫父類的析構函式。

father.h

class

father

son.h

class

son:

public father

5.如果有的類不需要建立它的物件,這個類中定義的某些成員函式只提供形式上的介面,讓子類來做具體實現,那麼可以使用純虛函式。

用法:使用virtual 和 = 0

father.h

class

father

son.h

class

son:

public father

son.cpp

int son::

val(

)

虛函式的常見問題

1 虛函式是動態繫結的,也就是說,使用虛函式的指標和引用能夠正確找到實際類的對應函式,而不是執行定義類的函式。這是虛函式的基本功能,就不再解釋了。2 建構函式不能是虛函式 而且,在建構函式中呼叫虛函式,實際執行的是父類的對應函式 因為自己還沒有構造好,多型是被disable的。3 析構函式可以是虛函...

c 常見問題總結

答 首先,extern是c c 語言中表明函式和全域性變數作用範圍的關鍵字,該關鍵字告訴編譯器,其宣告的函式和變數可以在本模組或其它模組中使用。通常,在模組的標頭檔案中對本模組提供給其它模組引用的函式和全域性變數以關鍵字extern宣告。extern c 是連線申明 linkage declarat...

C語言常見問題總結

1.用 注釋 在c語言中不是好辦法,尤其是在注釋的 中原先已經有注釋存在,可能會報錯,更好的辦法是用 if 和 endif 2.如果有一些宣告需要用於幾個不同的原始檔,可以在乙個單獨的檔案編寫這些宣告,然後用 include命令把這個檔案包含到需要使用這些宣告的原始檔中 3.標準的c編譯器不會對陣列...