c 高階十(虛函式)

2021-10-03 06:56:11 字數 1271 閱讀 6496

1,什麼是虛函式:

在類裡面使用vatrual修飾得函式稱為虛函式

2,先看下面乙個例子:

宣告三個個類,其中child1,child2繼承於base,並且存在相同的函式disp

並且要實現display分別列印各個類的disp

#include

using

namespace std;

class

base};

class

child1

:public base};

class

child2

:public base};

//顯示各個類的disp函式

void

display

(base *b)

intmain()

正常情況下,因為dispaly傳入不同物件的指標,呼叫disp函式應該是每個類的diap才對,但是發現上面一段程式執行的結果是:

這是因為c++要訪問哪個物件只取決於指標的型別,與哪個物件進行賦值無關

雖然這裡傳入的為不同物件的指標:

display(&b);

display(&c1);

display(&c2);但是接收的是base*

所以呼叫的還是base的disp()函式

這裡為了實現這個功能該怎麼辦呢?

3,將基類的disp函式加上virtual關鍵字:

#include

using

namespace std;

class

base};

class

child1

:public base};

class

child2

:public base};

//顯示各個類的disp函式

void

display

(base *b)

intmain()

這樣就正常了

即虛函式,實現通過指標呼叫函式時,就不再為指標所指的型別了,而是指標所指的物件的型別

十 函式高階

形參中的動態引數 def func a,b,args,c f kwargs print a print b print args print c print kwargs func 9,2,3,4,45,6,c 3 d 45,f pp 9 2 3,4,45,6 3 args 是把實參中多餘的的位置引...

C 虛函式表解析 高階篇

原文 一 前言在 c 虛函式表解析 中,對c 虛函式表進行了 但是在談論虛函式表裡,至少有以下這些內容沒有涉及 1 有成員變數的情況。2 有重複繼承的情況。3 有虛擬繼承的情況。4 有鑽石型虛擬繼承的情況。這篇文章將會是 c 虛函式表解析 的乙個續篇,將以c 物件的記憶體布局為重點,也是一篇高階高階...

C 虛函式 純虛函式

1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...