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

首頁 > 編程 > Delphi > 正文

C++ 和 Delphi 的函數覆蓋(Override)與重載(overload

2019-11-17 05:42:49
字體:
來源:轉載
供稿:網友
C++ 和 Delphi 的函數覆蓋(Override)與重載(overload)

Spacesoft【暗夜狂沙】

在面向對象編程中,當子類繼續了來自基類的函數后,子類有可能需要對其中的一些函數作出與基類不同處理,比如:

class CHuman
{
public:
void SayMyName()//打印出對象的姓名
{
cout << "Hi, I am a human" << endl;
}
};

那么很明顯,假如他的子類有一個同名、同參數和返回值(一句話,一摸一樣)的函數SayMyName,它會調用哪個函數呢?比如現在有一個class CMark

class CMark: public CHuman
{
public:
void SayMyName()
{
cout << "Hi, I am mark" << endl;
}
};

那么我們要問,下面的程序段:

CHuman *pH = new CMark;

if (pH)
pH->SayMyName();
else
cout << "cast error! " << endl;

delete pH;
pH = NULL;

要打印出來的,真的是我們想要的Hi, I am mark 嗎?

不是。它輸出了Hi, I am a human。這很糟糕,當我們指著一個人要他說出自己的名字的時候,他卻告訴我們他“是一個人”,而不是說出自己的名字。出現這樣的問題原因在于,用基類的指針指向公有派生類,可以訪問派生類從基類中繼續的成員函數。但假如派生類中也有同名的函數,則結果仍然是訪問基類的同名函數,而不是派生類本身的函數。而事實上,我們希望的是由一個對象的真實類型來決定到底該調用這些同名函數中的哪一個,就是說,這樣的決議是動態(Dynamic)的?;蛘呶覀兛梢哉f,我們希望當一個對象是子類型時,它的同名函數在子類中的實現覆蓋(override)掉基類的實現。

我們先從C++對這個問題的處理說起。

這是C++中比較典型的多態的例子,C++用虛函數來實現這樣的多態。具體點說,就是使用virtual 要害字來將函數說明成虛函數,在上一個例子中就是應該聲明成:

class CHuman
{
public:
virtual void SayMyName()//打印出對象的姓名
{
cout << "Hi, I am a human" << endl;
}
};

這樣,其他的代碼還是那個老樣子,但是我們的CMark 已經知道怎么說自己的名字了。CMark 的SayMyName()函數是否加了virtual 要害字的說明并沒有關系,因為根據C++語法的規定,因為它覆蓋了CHuman 的同名函數,它自己也就成為virtual 的了。至于為什么一個virtual 要害字有那么神奇的效果呢?C++ FAQ Lite 對此是這樣說明的: 在C++中,“虛成員函數是動態確定的(在運行時)。也就是說,成員函數(在運行時)被動態地選擇,該選擇基于對象的類型,而不是指向該對象的指針/引用的類型”。于是我們的pH就發現自己其實指向的是一個CMark類型的對象,而不是自己的類型所聲明的CHuman,所以它聰明的調用了CMark的SayMyName。


而Delphi 就是用override 要害字來說明函數覆蓋的。被覆蓋的函數必須是虛(virtual)的,或者是動態(dynamic)的,也就是說該函數在聲明時應該包含這兩個指示字中的一個,比如:

PRocedure Draw; virtual;

在需要覆蓋的時候,只需要在子類中用override 指示字重新聲明一下就可以了。

procedure Draw; override;

在語法上來說,聲明為 virtual和 dynamic是等價的。它們的差別在于,前者在實現上對速度進行了優化,而后者對代碼大小進行了優化。

假如基類和子類都含有同一個函數名和參數,并且在子類中不加override 指示字呢?這在語法上也是正確的。這意味著子類的函數同名實現把基類的實現隱藏(hide)掉了,盡管這二者在派生類中都存在。那么就回到了本文開頭的第一個例子說明的情況:當我們指著一個人要他說出自己的名字的時候,他卻告訴我們他“是一個人”,而不是說出自己的名字。

值得注重的是,與我們在C++ 中經常不加區分的把覆蓋一個函數和重載一個函數通稱為重載不同,在Delphi 中,只有重載(overload) 才是我們平時所說的重載,被重載的函數依然存在,依靠參數來決定到底調用那個實現。當然,當overload掉的函數和基類的函數參數相同時,基類的實現就被hide掉了,就像上面提到的一樣。而覆蓋(override)則是把讓被覆蓋的函數不可見了,確確實實的"覆蓋"掉了,原來的實現就不見了?;谶@樣的原因,許多文章甚至一些書都錯誤的把override翻譯成重載,筆者認為并不合適。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品黄页免费高清在线观看| 亚洲va欧美va国产综合久久| 国产福利成人在线| 久久天天躁狠狠躁老女人| 亚洲国产日韩欧美在线99| 最新国产精品亚洲| 久久大大胆人体| 国产精品扒开腿做爽爽爽视频| 日韩成人xxxx| 国产视频精品一区二区三区| 欧美三级免费观看| 亚洲天堂av网| 欧美精品在线观看| 亚洲日韩中文字幕| 国产午夜精品一区二区三区| 国产精品中文在线| 欧美激情一级二级| 俺去亚洲欧洲欧美日韩| 亚洲天堂一区二区三区| 欧美日韩中文字幕在线| 影音先锋日韩有码| 国产精品久久久久久久久久99| 91久久综合亚洲鲁鲁五月天| 日韩成人免费视频| 欧美三级欧美成人高清www| 亚洲激情在线视频| 国产欧美一区二区三区四区| 亚洲尤物视频网| 91在线中文字幕| 欧美高清在线播放| 国产欧美在线看| 国产成人短视频| 国产精品久久久久久久久免费看| 欧美日韩成人在线观看| 国产精品专区h在线观看| 中文字幕精品一区久久久久| 国产一区二区三区视频免费| 亚洲人精选亚洲人成在线| 亚洲久久久久久久久久久| 欧美激情在线视频二区| 久久99精品久久久久久琪琪| 欧美国产中文字幕| 久久av红桃一区二区小说| 久久久久久久久国产精品| 亚洲欧美国产日韩天堂区| 88国产精品欧美一区二区三区| 97超碰国产精品女人人人爽| 亚洲欧美国产日韩中文字幕| 国产91成人在在线播放| 色青青草原桃花久久综合| 久久久视频免费观看| 亚洲欧美日本精品| 国产99久久精品一区二区| 在线精品国产成人综合| 国产亚洲精品久久久久久| 亚洲自拍偷拍第一页| 国产激情999| 国产成人精品一区| 亚洲字幕在线观看| 777777777亚洲妇女| 国产精品日日摸夜夜添夜夜av| 国产999精品久久久| 国产精品成人一区二区| 日韩中文字幕在线视频播放| 成人高h视频在线| 日本精品久久电影| 日韩av在线影视| 欧美与黑人午夜性猛交久久久| 欧美激情视频网| 92看片淫黄大片欧美看国产片| 最近2019中文字幕一页二页| 欧美大全免费观看电视剧大泉洋| 国产精品成人av性教育| 国产91精品黑色丝袜高跟鞋| 国产婷婷97碰碰久久人人蜜臀| 久青草国产97香蕉在线视频| 中文精品99久久国产香蕉| 九九九热精品免费视频观看网站| www.日本久久久久com.| 久久久久女教师免费一区| 在线播放精品一区二区三区| 欧美激情区在线播放| 久久男人av资源网站| 热re91久久精品国99热蜜臀| 久久中文字幕一区| 琪琪亚洲精品午夜在线| 91免费在线视频网站| 国产一区在线播放| 成人乱人伦精品视频在线观看| 色婷婷av一区二区三区在线观看| 国产精品美女久久久免费| 欧美性猛交xxxx免费看久久久| 久久久999精品免费| 国内精品400部情侣激情| 欧美精品手机在线| 91成人精品网站| 另类天堂视频在线观看| 亚洲男人av在线| 国产suv精品一区二区| 国外成人免费在线播放| 欧美影院久久久| 秋霞午夜一区二区| 欧美另类在线播放| 亚洲色图50p| 亚洲天堂av在线播放| 亚洲综合第一页| 欧美成人精品一区| 欧美成人h版在线观看| 欧美视频免费在线观看| 亚洲а∨天堂久久精品9966| 欧美日韩亚洲系列| 日韩成人中文字幕| 亚洲欧美福利视频| 97在线视频国产| 欧美激情伊人电影| 国产亚洲精品成人av久久ww| 在线观看国产欧美| 美乳少妇欧美精品| 欧美日韩视频免费播放| 亚洲欧美日韩第一区| 欧美日韩国产在线| 欧美国产日韩一区| 日韩久久免费电影| 欧洲精品久久久| 久久视频精品在线| 日韩网站免费观看高清| 亚洲毛片在线看| 欧美性少妇18aaaa视频| 久久香蕉精品香蕉| 国产精品视频大全| 在线观看国产精品淫| 中文字幕亚洲情99在线| 亚洲国产天堂久久综合| 欧洲成人免费视频| 亚洲人成网站777色婷婷| 在线丨暗呦小u女国产精品| 青草热久免费精品视频| 日本最新高清不卡中文字幕| 久久久久久久久爱| 性日韩欧美在线视频| 欧美性感美女h网站在线观看免费| 国产精品欧美日韩久久| 精品国产网站地址| 欧美日韩亚洲高清| 激情成人在线视频| 久久免费视频观看| 欧美日韩国产一区二区| 91成人在线视频| 亚洲美女性生活视频| 亚洲精品久久视频| 欧美交受高潮1| 欧美成人在线免费| 精品国产美女在线| 中文字幕日韩免费视频| 性欧美长视频免费观看不卡| 色悠久久久久综合先锋影音下载| 国产精品极品美女在线观看免费| 国产在线观看精品一区二区三区| 日韩av中文字幕在线播放| 亚洲白拍色综合图区| 久久免费视频网站| 日韩欧美亚洲范冰冰与中字| 欧美理论电影在线观看| 亚洲精品国产免费|