新的虛函式的派生

2021-06-21 11:51:19 字數 887 閱讀 1731

在派生類中時,很容易在無意中建立乙個新的虛函式的派生類中時,你實際上是在重寫基類的函式。

當你不正確的比賽在派生類和基類中的乙個函式原型。

比如說呢。

當這一切發生的時候,它可以很容易使乙個函式呼叫a()或b()和期望得到的衍生版本但最終得到的基礎版代替。

這個現象也能輕易發生當您新增了乙個新的引數在基地的功能而忘了更新派生版本。當這種情況發生時,該功能是乙個重寫的派生的不再是乙個重寫你的**,和神秘地停止工作。這類問題很難找到,因為他們是如此的變化觸發看起來無害的。

c + + 11引入了乙個新的識別符號,稱為覆蓋允許你明確你想要的功能覆蓋標記。如果函式沒有過載,編譯器會抱怨。比如說呢。12

3456

78910

1112

1314

15階級基礎

;派生類:公共基礎

;派生類:公共基礎

;最後的標識也可以用在類使其非遺傳的:12

3456

7階級基礎最終/最後的標識標誌著這類不可繼承

;派生類:公共基礎/試圖重寫final類基地將導致編譯器錯誤

;有一些正當的理由,最終使函式或類。例如,最終最常見的用途是確保乙個不可變類保持不變。乙個不可變類是專門設計的類的狀態不能被建立後,改性。沒有最終的識別符號,派生類可以使類成為可變的功能。如果基類是最終的,不能將它的子類,這是不可避免的。

然而,一般來說,除非你有很好的理由,最後通常應該避免使用。如果你使用關鍵字,檔案的原因,因為它可能不是很明顯的繼承你的**的人。

預設預設情況下,c++將提供乙個預設建構函式,拷貝建構函式,賦值操作符(==操作符)和析構函式。如果你為你的類的所有這些功能替換版本,c++沒有提供預設版本。然而,在c + + 11,你現在可以指定您希望編譯器提供乙個預設的吧。這是通過原型的功能和使用預設的說明符做

派生 虛函式那點事(未完)

includeusing namespace std class b0 基類bo宣告 class b1 public b0 公有派生 class d1 public b1 公有派生 void fun b0 ptr 普通函式 int main 主函式 由於display 為虛函式,且b1公有繼承自b0...

虛函式與派生類過載

這裡不講虛函式的定義了 直接進入主題,就是過載。如果基類宣告了乙個函式是虛函式,而且派生類並沒有改變引數,只是把函式內容改變了,那麼這個可以認為是 重寫 派生類過載是什麼呢,就是在派生類中僅僅保留基類的函式名,引數變了,或者返回型別也變了,如果不改變引數僅僅改變返回型別不是過載,這樣也是錯的。如果過...

繼承與派生 虛函式和多型

繼承和派生 class csstudent void setname const string name class cundergraduate pulic cstudent 覆蓋 bool canbaoyan 派生類的寫法 類名 public 基類名cstudent printinfo 呼叫基類...