首頁 >後端開發 >C#.Net教程 >C++11新特性 - 多型態與虛函數,override說明符

C++11新特性 - 多型態與虛函數,override說明符

php是最好的语言
php是最好的语言原創
2018-08-01 14:11:432452瀏覽

多型態與虛函數

多型是C 的重要特徵之一,同時也是初學者較難理解的特徵。先來看一個簡單的例子:

C++11新特性 - 多型態與虛函數,override說明符

 程式碼很簡單,按照作者自己的話描述上述程式碼中多態從定義到起作用的要點,應該不會再簡單了,從main函數看起:

  1. 基底類別的指標

  2. #指向衍生類別的物件

  3. #衍生類別覆寫了基底類別中定義的虛函數 

C++11新特性 - 多型態與虛函數,override說明符#這三點是必要條件,缺一不可。

上面的程式碼還有另外一些有意思的地方,雖然不影響結果,但還是了解一下為好。衍生類別中重新定義(覆寫)基底類別中虛擬函數時:

#virtual關鍵字不是必須

C++11新特性 - 多型態與虛函數,override說明符不必將函數宣告為public

#覆蓋失敗的情況

 虛函數的覆寫要求兩個函數的簽名必須一致。例如下面的程式碼:

 由於sub2::f1的簽章和base::f1的簽章不一致,所以無法實作多態。

 也許你會覺得這個錯誤太明顯了,根本不會發生。那是因為本例中的成員函數太簡單了。在實際的開發中隨著開發規模的擴大,類別的繼承關係會變得越來越深,成員函數的參數也會越來越多,經常會遇到衍生類別中定義的成員函數的簽章和覆蓋物件的簽名不一致的而導致覆蓋失敗的情況。

 而且要命的是,這種錯誤不會產生編譯錯誤,不容易被發現。

override說明符

為了解決這個問題,C 11中引入了一個方法:在宣告、定義衍生類別中的覆寫函數時使用override說明符:

#########由於明確的函數的用意,所以當編譯器無法在基底類別中找到相同簽章的虛函數的時候,就會產生編譯錯誤。 #########作者感受#########更好運用語言本身的功能,不放棄任何自動查出錯誤的機會,這應該成為C 程式設計師的習慣。也算是工匠精神的體現吧。 ######相關文章:#########詳談c 11 final與override說明符############C 11新功能中auto 和 decltype 區別與聯繫#########相關影片:#########Android6.0新功能#######

以上是C++11新特性 - 多型態與虛函數,override說明符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn