最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中Overload,Override,Hide之間的區(qū)別

 更新時間:2013年09月13日 10:39:19   作者:  
重載overload,這個概念是大家熟知的。在同一可訪問區(qū)內(nèi)被聲名的幾個具有不同參數(shù)列的(參數(shù)的類型、個數(shù)、順序不同)同名函數(shù),程序會根據(jù)不同的參數(shù)列來確定具體調(diào)用哪個函數(shù),這種機制就是重載

一. 簡介
•Overload:
重載,指函數(shù)同名,但是參數(shù)個數(shù)不同、或者參數(shù)類型不同的多個實現(xiàn)。(如果參數(shù)相同但是僅僅返回值不同不是重載,編譯器會報錯。)

編譯器判斷重載函數(shù):
•第一步,
是確定該調(diào)用中所考慮的重載函數(shù)的集合,該函數(shù)集合被稱為候選函數(shù)(candidant function)。所謂候選函數(shù)就是與被調(diào)用函數(shù)同名的函數(shù)。

•第二步,分為兩動作:第一個動作是編譯器從第一步選出的候選函數(shù)中調(diào)出可行函數(shù)(viable function)??尚泻瘮?shù)的函數(shù)參數(shù)個數(shù)與調(diào)用的函數(shù)參數(shù)個數(shù)相同,或者可行函數(shù)的參數(shù)可以多一些,但是多出來的函數(shù)參數(shù)都要有相關的缺省值;第二個動作是根據(jù)參數(shù)類型的轉換規(guī)則將被調(diào)用的函數(shù)實參轉換(conversion)成候選函數(shù)的實參。這里本著充分利用參數(shù)類型轉換的原則,換句話說,盡可能的使用上參數(shù)類型轉換。當然轉換要以候選函數(shù)為轉換的目標。如果依照參數(shù)轉換規(guī)則沒有找到可行函數(shù),則該調(diào)用就是錯誤的,則說沒有函數(shù)與調(diào)用匹配,屬于無匹配情況(no match function)。

•第三步,從第二步中選出的可行函數(shù)中選出最佳可行函數(shù)(best match situation)。在最佳可行函數(shù)的選擇中,從函數(shù)實參類型到相應可行函數(shù)參數(shù)所用的轉化都要劃分等級,根據(jù)等級的劃分(ranked),最后選出最佳可行函數(shù)。

•Override:(想不到比較貼切的翻譯)指在繼承時,父類函數(shù)聲明為 virtual , 子類重新聲明和實現(xiàn)該函數(shù)(函數(shù)名和參數(shù)完全相同,返回值不做約束)。子類該函數(shù)可以聲明為 virtual ,也可以不加,不做限制,但是如果該子類還會繼續(xù)被重載,則最好也聲明為 virtual 。正是因為有virtual和Override的機制,C++才能夠實現(xiàn)多態(tài)。

•Hide:繼承結構中的函數(shù)隱藏,指父類中聲明了函數(shù),子類中聲明和定義了完全一致的函數(shù),但是父類中函數(shù)沒有聲明為vitual,此時子類中的同名同參數(shù)函數(shù)會完全隱藏父類的函數(shù)。貌似和Override很像,但是其實現(xiàn)機制和Override完全不同,且會導致問題,應該避免使用。( virtual機制是使用虛表(vtable)實現(xiàn)的,虛表維護一個虛函數(shù)指針列表,但一個對象的某個虛函數(shù)被調(diào)用的時候,去虛表中查找并決定調(diào)用的是哪個函數(shù),具體的實現(xiàn),小編下次在講。)

復制代碼 代碼如下:

class Super
{
public:
void go() { cout << "go() called on Super" << endl; }
};
class Sub : public Super
{
public:
void go() { cout << "go() called on Sub" << endl; }
};
Sub mySub;
mySub.go(); // output: go() called on Sub
Super& ref = mySub;
ref.go(); //output: go() called on Super

也許你希望它會調(diào)用子類的函數(shù),但這可能和你的預期完全不同。

二. 總結
重載overload,這個概念是大家熟知的。在同一可訪問區(qū)內(nèi)被聲名的幾個具有不同參數(shù)列的(參數(shù)的類型、個數(shù)、順序不同)同名函數(shù),程序會根據(jù)不同的參數(shù)列來確定具體調(diào)用哪個函數(shù),這種機制就是重載。重載不關心函數(shù)的返回值類型,即返回類型不同無法構成重載。此外,C++ 中的const成員函數(shù)也可以構成overload。

總結一下重載的特征:
1、處在相同的空間中,即相同的范圍內(nèi);
2、函數(shù)名相同;
3、參數(shù)不同,即參數(shù)個數(shù)不同,或相同位置的參數(shù)類型不同;
4、const成員函數(shù)可以和非const成員函數(shù)形成重載;
5、virtual關鍵字、返回類型對是否夠成重載無任何影響。

覆蓋override,是指派生類中存在重新定義的函數(shù),其函數(shù)名、參數(shù)列、返回值類型必須同父類中的相對應被覆蓋的函數(shù)嚴格一致,覆蓋函數(shù)和被覆蓋函數(shù)只有函數(shù)體(花括號中的部分)不同,當派生類對象調(diào)用子類中該同名函數(shù)時會自動調(diào)用子類中的覆蓋版本,而不是父類中的被覆蓋函數(shù)版本,這種機制就叫做覆蓋,特征是:   

1、不同的范圍(分別位于派生類與基類);      
2、函數(shù)名字相同;      
3、參數(shù)相同;      
4、基類函數(shù)必須有virtual關鍵字。 

針對上述兩個概念,還有一個隱藏hide。所謂的隱藏,指的是派生類類型的對象、指針、引用訪問基類和派生類都有的同名函數(shù)時,訪問的是派生類的函數(shù),即隱藏了基類的同名函數(shù)。隱藏規(guī)則的底層原因其實是C++的名字解析過程。在繼承機制下,派生類的類域被嵌套在基類的類域中。派生類的名字解析過程如下:

1、首先在派生類類域中查找該名字。
2、如果第一步中沒有成功查找到該名字,即在派生類的類域中無法對該名字進行解析,則編譯器在外圍基類類域對查找該名字的定義。

總結一下隱藏的特征:
1、如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual關鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。   

2、如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual關鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)。

相關文章

  • 基于稀疏圖上的Johnson算法的詳解

    基于稀疏圖上的Johnson算法的詳解

    本篇文章介紹了,稀疏圖上的Johnson算法的詳解。需要的朋友參考下
    2013-05-05
  • c++11 新特性——智能指針使用詳解

    c++11 新特性——智能指針使用詳解

    這篇文章主要介紹了c++11 新特性——智能指針使用的相關資料,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C#開源類庫SimpleTCP使用方法

    C#開源類庫SimpleTCP使用方法

    SimpleTCP內(nèi)部有一個特殊字符分割字符串的協(xié)議可以直接使用,也可以在DataReceived事件處理程序中實現(xiàn)自己的協(xié)議,這篇文章主要介紹了C#開源類庫SimpleTCP的使用方法,需要的朋友可以參考下
    2021-09-09
  • 生成隨機數(shù)rand函數(shù)的用法詳解

    生成隨機數(shù)rand函數(shù)的用法詳解

    本篇文章是對生成隨機數(shù)rand函數(shù)的用法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)三子棋游戲

    C語言實現(xiàn)三子棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)三子棋游戲的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言責任鏈模式示例代碼

    C語言責任鏈模式示例代碼

    大家好,本篇文章主要講的是C語言責任鏈模式示例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++中的String的常用函數(shù)用法

    C++中的String的常用函數(shù)用法

    這篇文章主要介紹了C語言中String的常用函數(shù)用法,對學習String的小伙伴有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-03-03
  • VS2019安裝cbd調(diào)試器的實現(xiàn)步驟

    VS2019安裝cbd調(diào)試器的實現(xiàn)步驟

    本文主要介紹了VS2019安裝cbd調(diào)試器的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • C++調(diào)試記錄與心得分享

    C++調(diào)試記錄與心得分享

    本文給大家詳細記錄了一次C++的調(diào)試過程,以及調(diào)試的心得,非常的實用,有需要的小伙伴可以參考下
    2017-07-07
  • 快速入門的一些C\C++書籍

    快速入門的一些C\C++書籍

    這篇文章為大家精心推薦了一些快速入門的一些C\C++書籍,希望大家可以喜歡,對這門語言可以產(chǎn)生興趣,需要的朋友可以參考下
    2015-12-12

最新評論

招远市| 海安县| 得荣县| 泊头市| 滦南县| 汶川县| 贵德县| 新邵县| 新兴县| 麻江县| 大关县| 临澧县| 永泰县| 通辽市| 扎鲁特旗| 郯城县| 抚松县| 大港区| 广宗县| 阜新市| 台中市| 雅安市| 佛教| 临西县| 丰都县| 沙湾县| 五指山市| 宁德市| 临漳县| 铁岭市| 夏邑县| 桃园市| 高青县| 边坝县| 大石桥市| 乐昌市| 酒泉市| 漠河县| 江永县| 乌恰县| 奉贤区|