1. 程式人生 > >C++11新特性學習筆記—final和override關鍵字

C++11新特性學習筆記—final和override關鍵字

一、final關鍵字

               為什麼c++現在才提供final這個關鍵字?很奇怪。

            和Java一樣,c++中的final關鍵字是用來修飾一個函式,防止這個函式被子類重寫。

              

      二、override關鍵字

        這個關鍵字作用蠻大的。 在C++中,有父類A,子類B,父類中有虛擬函式x,子類B繼承x,如果在B中x函式之前不加virtual關鍵字,編譯器還是會預設為我們新增的,雖然略寫了感覺方便,但是可讀性降級了,所以最好還是在子類中為繼承來的函式之前新增上virtual關鍵字。當繼承結構比較長,比如A繼承B,B繼承C,C繼承自D這種,就很複雜了,有時候我們在為子類寫函式的時候,程式碼量大的時候,可能我們都不知道自己是不是在過載一個介面,還有如果是過載來的,那麼函式名稱確保沒有錯誤等等,這個時候就很讓人煩躁了!如何解決這個問題呢?比如,我們確認自己目前在子類中正在重寫一個來自父類的函式,那麼我們最好是用override關鍵字來修飾該函式,override修飾的函式表示這個函式一定是父類(祖先)中傳下來的,這樣就幫助我們進行了函式的名稱、引數的檢查,很方便阿!
         比如下面書中的例子:           
                    加了overriade關鍵字後,很容易就發現函式名稱寫錯了,引數不對。              所以,以後在子類中重寫父類函式的時候,一定加上virtual和override關鍵字(上面的圖忘記在子類中幾個函式前面加virual了,加了之後,效果一樣的)。

相關推薦

C++11特性學習筆記finaloverride關鍵字

一、final關鍵字                為什麼c++現在才提供final這個關鍵字?很奇怪。             和Java一樣,c++中的final關鍵字是用來修飾一個函式,防止這個

C++11特性學習筆記—使用花括號就地初始化

這個特性是真正極好的!非常好用且方便!降低工作量!      如果一個類有很多成員變數A,B,C,D...,而且有很多不同版本的建構函式c1,c2,c3....,每個不同的建構函式可能會選擇不同的成員

C++11特性:移動語義右值引用

右值引用 傳統的C++引用(左值引用)使得識別符號關聯到左值。左值是一個表示資料的表示式(如變數名或解除引用的指標),程式可以獲得其地址。 C++11新增了右值引用。右值引用,顧名思義,可以關聯到右值,即——可以出現在賦值表示式的右邊,但不能對其應用地址運算

C++11特性:function, bindlambda

function, bind和lambda:bind中使用std::ref和std::cref,bind中預設使用的拷貝,而不是引用,根據實際情況,可使用std::ref和std::cref將引數設定為引用lambda:下面我們來總結下所有出現的 lambda 引入符:[]

C++11特性——default函式deleted函式

轉自:http://blog.jobbole.com/103669/ default函式 default函式作用於類的特殊成員函式,為其自動生成預設的函式定義體,提高程式碼的執行效率。 類的特殊成員函式: 預設建構函式 解構函式 複

C++11特性final override識別符號

final:   final修飾符可用於修飾類,放在類名後面,被final修飾符修飾的類不能被繼承。示例程式碼: // 正確的示範 #include <iostream> class A { public: void show_a_info() { st

C++11特性final override標識符

並不會 ptr 輸出 erro 子類 main count color 特性 final:   final修飾符可用於修飾類,放在類名後面,被final修飾符修飾的類不能被繼承。示例代碼: // 正確的示範 #include <iostream> class

C++11 特性之右值引用轉移建構函式

問題背景 #include <iostream> usingnamespace std;   vector<int> doubleValues (const vector<int>& v)   {  

C++11特性11)- 標準庫函式beginend

遍歷陣列元素的方法假設有一個數組:inta1[]{1,2,3,4,5};遍歷陣列的所有元素,可以這樣:for(unsignedinti=0;i<sizeof(a1)/sizeof(a1[0]);++i){cout<<a1[i]<<endl;}也可

c++11特性總結boost庫的使用

來自<<深入理解c++11 c++11新特性解析與應用>> 程式碼見:https://github.com/Jeromecen/cpp11study/tree/master I、保持語言的穩定性和相容性” 總結:主要是utf8字串,虛擬函式o

C++11特性應用--實現延時求值(std::functionstd::bind)

說是延時求值,注意還是想搞一搞std::function和std::bind。 現在就算是補充吧,再把std::bind進行討論討論。 何為Callable Objects? 即可呼叫物件,比如函式指標、仿函式、類成員函式指標等都可稱為可呼叫物件。

java 特性學習筆記

sets arp string get pen option ring true read java 1.7 Files.write(path,list,StandardCharsets.UTF_8,StandardOpenOption.APPEND); St

C++11特性應用--介紹幾個新增的便利算法(用於排序的幾個算法)

uil pretty processor nes container 升序 .text mar c++11 繼續C++11在頭文件algorithm中添加的算法。 至少我認為,在stl的算法中,用到最多的就是sort了,我們不去探索sort的源代碼。就

C++11特性之 std::forward(完美轉發)(轉)

tails array sin .com std utili res details calling 我們也要時刻清醒,有時候右值會轉為左值,左值會轉為右值。 (也許“轉換”二字用的不是很準確) 如果我們要避免這種轉換呢? 我們需要一種方法能按照參數原來的類型轉發到另一個函

C++11特性,bind,基於對象

實體 oca jci con data () ebr mrp ddd body, table{font-family: 微軟雅黑; font-size: 10pt} table{border-co

C++11特性——lambda表達式

amp 多個 str exp href 似的 exception 定義 參數傳遞 C++11的一大亮點就是引入了Lambda表達式。利用Lambda表達式,可以方便的定義和創建匿名函數。對於C++這門語言來說來說,“Lambda表達式”或“匿名函數”這些概念聽起來好像很深奧

C++11特性(87)-專題文章彙總

寫在最後   本連載從去年10月29日開始,到今天就全部結束了。為了方便各位讀者更加方便地利用這些文章,特將本連載的文章連結彙總到一個檔案中。歡迎大家多加利用。   歡迎大家繼續關注本公眾號!   文章下載連結: https://down

C++11特性(86)-類型別的union成員(2)

經過一番準備,我們進入正題。   類型別的union成員 C++的早期版本不允許union的成員是定義了建構函式或拷貝控制成員的類型別成員,C++11中取消了這個限制。但是也別高興得太早,因為這類union在發生涉及到類型別成員的值轉換時需要根據需求呼叫相關類成員的建構函式

C++11特性(85)-類型別的union成員(1)

接下來的兩篇文章介紹C++11的最後一個新特性:類型別的union成員。這個新特性涉及的內容較多,所以本文先做一些不屬於C++11新特性的準備工作。   匿名union 我們通過一個例子類說明。假設有以下函式: 這 個函式的功能是根據引數rt的要求產生隨機數

C++11特性(84)-標準庫mem_fn類模板

定製演算法 演算法是C++標準庫中非常重要的部分,C++通過演算法+容器的方式將資料結構和演算法進行了分離。這樣做的好處就是使使用者獲得最大限度的靈活性。   例如下面的Tracer類。 我們可以非常方便的定義儲存Tracer物件的資料結構: