亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中Overload,Override,Hide之間的區別

2020-01-26 15:52:54
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

復制代碼 代碼如下:

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

也許你希望它會調用子類的函數,但這可能和你的預期完全不同。

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

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

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

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

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品成人久久| 亚洲天堂色网站| 日韩av电影免费观看高清| 国产欧美日韩精品丝袜高跟鞋| 日韩成人在线网站| 国产精品激情自拍| 欧美精品激情blacked18| 国产成人精品免高潮费视频| 91精品久久久久久久久久| 91丝袜美腿美女视频网站| 另类少妇人与禽zozz0性伦| 久久久久久久国产精品| 一本色道久久综合亚洲精品小说| 久久影院免费观看| 亚洲深夜福利在线| 国产一区二区三区在线播放免费观看| 成人欧美一区二区三区在线湿哒哒| 亚洲精品国产品国语在线| 一本色道久久综合亚洲精品小说| 亚洲第一视频在线观看| 亚洲第一免费网站| 国产精品网红福利| 自拍偷拍免费精品| 亚洲free性xxxx护士白浆| 国产精品一二三在线| 久久久久久噜噜噜久久久精品| 国产精品三级美女白浆呻吟| 国产免费成人av| 亚洲第一视频在线观看| 欧美成人精品激情在线观看| 精品中文字幕久久久久久| 国产精品一区二区在线| 日韩毛片在线观看| 久久精品国产欧美激情| 国产精品美女午夜av| 懂色av一区二区三区| zzijzzij亚洲日本成熟少妇| 亚洲综合在线播放| 午夜精品国产精品大乳美女| 国产精品第三页| 中文字幕在线看视频国产欧美| 国产欧美久久一区二区| 国产999在线| 国产在线98福利播放视频| 久久久www成人免费精品张筱雨| 中文字幕亚洲综合久久筱田步美| 中文字幕日韩精品在线| 亚洲欧洲成视频免费观看| 久久精品人人做人人爽| 在线播放国产一区二区三区| 午夜精品在线视频| 欧美国产亚洲精品久久久8v| 欧美精品videosex性欧美| 92版电视剧仙鹤神针在线观看| xvideos国产精品| 欧美精品在线看| 久久香蕉精品香蕉| 欧美电影免费观看大全| 国产精品网红福利| 亚洲图中文字幕| 欧美黄色性视频| 国内精品在线一区| 久久亚洲国产精品成人av秋霞| 91亚洲人电影| 国产成人精品视频在线观看| 久久五月天综合| 欧美国产极速在线| 亚洲精品中文字幕女同| 日韩免费在线视频| 日韩精品视频在线| 欧美精品videosex牲欧美| 亚洲国产精品久久久久秋霞蜜臀| 久久亚洲成人精品| 亚洲国产另类久久精品| 91久久精品国产91性色| 中文字幕精品—区二区| 欧美最猛黑人xxxx黑人猛叫黄| 91av在线影院| 成人国产精品免费视频| 成人在线小视频| 丁香五六月婷婷久久激情| 久久人人爽亚洲精品天堂| 亚洲精品女av网站| 亚洲福利精品在线| 精品亚洲一区二区三区在线观看| 欧美日韩国产专区| 国产欧美日韩精品专区| 成人在线中文字幕| 久久精品这里热有精品| 中文字幕国产亚洲2019| 日韩va亚洲va欧洲va国产| 青青久久av北条麻妃海外网| 国内精品小视频| 国内揄拍国内精品少妇国语| 亚洲毛茸茸少妇高潮呻吟| 亚洲a区在线视频| 精品福利免费观看| 91精品国产高清久久久久久| 亚洲男人天堂视频| 欧美性在线观看| 久久69精品久久久久久国产越南| 色综合导航网站| 欧美成人激情视频免费观看| 欧美午夜丰满在线18影院| 欧美成人在线免费视频| 九九热视频这里只有精品| 国产精品久久久久高潮| 久久综合伊人77777蜜臀| 欧美精品在线免费| 最近免费中文字幕视频2019| 91精品久久久久久久久久入口| 91深夜福利视频| 亚洲美女在线看| 国产精品久久久久久久久久久久久久| 成人av电影天堂| 亚洲精品网站在线播放gif| 91伊人影院在线播放| 亚洲精品久久久久久久久久久久| 亚洲午夜性刺激影院| 96国产粉嫩美女| 欧美日韩国产第一页| 91亚洲精华国产精华| 精品美女久久久久久免费| 亚洲国产91色在线| 搡老女人一区二区三区视频tv| 国产成人精品免高潮费视频| 亚洲奶大毛多的老太婆| 日韩网站免费观看| 欧美性黄网官网| 国产精品视频永久免费播放| 美女av一区二区三区| 日本精品视频在线| 在线性视频日韩欧美| 日韩在线播放av| 97精品一区二区视频在线观看| 久久综合国产精品台湾中文娱乐网| 在线视频亚洲欧美| 色噜噜狠狠狠综合曰曰曰88av| 97精品视频在线| 亚洲aa中文字幕| 疯狂做受xxxx高潮欧美日本| 欧美在线欧美在线| 欧美激情免费观看| 欧美一级电影免费在线观看| 狠狠色狠狠色综合日日小说| 亚洲国产精久久久久久| 97视频在线看| 亚洲国产精品久久久| 欧美激情精品久久久| 欧美性猛交xxx| 97精品视频在线播放| 亚洲美女免费精品视频在线观看| 日韩女优在线播放| 欧美有码在线观看视频| 欧美性受xxxx黑人猛交| 国产精品第二页| 中文字幕无线精品亚洲乱码一区| 久久久久久久爱| 亚洲国产另类 国产精品国产免费| 国产精品99久久久久久久久久久久| 91网站免费观看| 在线观看亚洲视频| 日本不卡视频在线播放| 国产成人av在线|