動態多型 虛函式

2021-07-28 07:12:46 字數 750 閱讀 8923

使用平台:vs2013

動態多型

動態繫結:在程式執行期間,判斷所引用物件的實際型別,根據實際的型別呼叫相應的方法。

動態繫結的條件:

1. 必須是虛函式;

2. 通過基類型別的引用或者指標來呼叫虛函式。

對於有虛函式的類,編譯器都會維護一張表,物件的前四個位元組就是指向虛表的指標。

重寫(覆蓋):

不再同一作用域(分別在基類和派生類);

函式名相同,引數列表相同,返回值相同(協變和析構函式類外);

基類函式必須有virtual關鍵字(子類最好寫上);

訪問修飾符可以不同。

協變:返回值可以不同,必須是特殊情況(返回值必須構成基類或者派生類的指標)。

析構:基類析構函式加上virtual構成重寫。

總結:

在基類中定義了虛函式,在派生類中該函式始終保持虛函式特性;

只有類的非靜態成員函式才能定義為虛函式;

如果在類外定義虛函式,只能在宣告函式時加virtual,定義時不能加;

建構函式不能定義為虛函式(物件還沒有定義出來);

不要在建構函式和析構函式中呼叫虛函式,在建構函式和析構函式中,物件是不完整的,可能會出現未定義的形為;

最好將基類的析構函式定義為虛函式(構成重寫);

虛表是所有類物件例項共有的。

虛函式多型

一 知識點 1 乙個操作隨著所傳遞的物件型別的不同能夠做出不同的反應,其行為模式成為多型。p413 2 基類與派生類的同名操作,只要標記上virtual,則該操作便具有多型性。p416 3 一旦標記基類的函式為虛函式,便有連鎖反應,後面繼承的類中一切同名成員函式都變成了虛函式。如果是引發實際複製動作...

多型 虛函式

繼承模式分為單繼承和多繼承 在多繼承中會有相應的一些問題產生,比如資料冗餘,二義性等問題,那麼我們要如何解決這種問題。利用虛繼承便可以解決,在虛繼承的時候由虛基表可以去除資料冗餘和二義性。那麼函式可不可以寫成是虛函式呢?寫成虛函式有什麼作用?在派生類裡重寫基類的虛函式可以實現多型。include u...

虛函式多型

虛函式訪問知識點 王道程式設計師求職寶典 p163 1 與普通函式一樣,虛函式可通過物件名來呼叫,此時編譯器採用靜態聯編。通過物件名訪問虛函式時,呼叫哪個類的函式取決於定義物件名的型別。物件是基類就調基類,物件是子類就調相應的子類。2 使用指標訪問非虛函式時,編譯器會根據指標本身的型別決定呼叫哪個函...