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

首頁(yè) > 編程 > C++ > 正文

簡(jiǎn)要解讀C++的動(dòng)態(tài)和靜態(tài)關(guān)聯(lián)以及虛析構(gòu)函數(shù)

2020-05-23 14:14:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了簡(jiǎn)要解讀C++的動(dòng)態(tài)和靜態(tài)關(guān)聯(lián)以及虛析構(gòu)函數(shù),析構(gòu)函數(shù)在C++編程中平時(shí)并不是太常用,需要的朋友可以參考下

C++靜態(tài)關(guān)聯(lián)與動(dòng)態(tài)關(guān)聯(lián)、C++是怎樣實(shí)現(xiàn)多態(tài)性的

在現(xiàn)實(shí)生活中,多態(tài)性的例子是很多的。我們分析一下人是怎樣處理多 態(tài)性的。例如,新生被錄取人大學(xué),在人學(xué)報(bào)到時(shí),先有一名工作人員審查材料,他的職責(zé)是甄別資格,然后根據(jù)錄取通知書(shū)上注明的錄取的系和專(zhuān)業(yè),將材料轉(zhuǎn)到有關(guān)的系和專(zhuān)業(yè),辦理具體的注冊(cè)人學(xué)手續(xù),也可以看作調(diào)用不同部門(mén)的處理程序辦理入學(xué)手續(xù)。在學(xué) 生眼里,這名工作人員是總的人口,所有新生辦入學(xué)手續(xù)都要經(jīng)過(guò)他。學(xué)生拿的是統(tǒng)一的錄取通知書(shū),但實(shí)際上分屬不同的系,要進(jìn)行不同的注冊(cè)手續(xù),這就是多態(tài)。那么,這名工 作人員怎么處理多態(tài)呢?憑什么把它分發(fā)到哪個(gè)系呢?就是根據(jù)錄取通知書(shū)上的一個(gè)信 息(你被錄取入本校某某專(zhuān)業(yè))。可見(jiàn),要區(qū)分就必須要有相關(guān)的信息,否則是無(wú)法判別的。

同樣,編譯系統(tǒng)要根據(jù)已有的信息,對(duì)同名函數(shù)的調(diào)用作出判斷。例如函數(shù)的重載, 系統(tǒng)是根據(jù)參數(shù)的個(gè)數(shù)和類(lèi)型的不同去找與之匹配的函數(shù)的。對(duì)于調(diào)用同一類(lèi)族中的虛函數(shù),應(yīng)當(dāng)在調(diào)用時(shí)用一定的方式告訴編譯系統(tǒng),你要調(diào)用的是哪個(gè)類(lèi)對(duì)象中的函數(shù)。例如可以直接提供對(duì)象名,如studl.display()或grad1.display()。這樣編譯系統(tǒng)在對(duì)程序進(jìn)行編譯時(shí),即能確定調(diào)用的是哪個(gè)類(lèi)對(duì)象中的函數(shù)。

確定調(diào)用的具體對(duì)象的過(guò)程稱(chēng)為關(guān)聯(lián)(binding)。binding原意是捆綁或連接,即把兩樣?xùn)|西捆綁(或連接)在一起。在這里是指把一個(gè)函數(shù)名與一個(gè)類(lèi)對(duì)象捆綁在一起,建立關(guān)聯(lián)。一般地說(shuō),關(guān)聯(lián)指把一個(gè)標(biāo)識(shí)符和一個(gè)存儲(chǔ)地址聯(lián)系起來(lái)。在計(jì)算機(jī)字典中可以査到,所謂關(guān)聯(lián),是指計(jì)算機(jī)程序中不同的部分互相連接的過(guò)程。有些書(shū)中把binding譯為聯(lián)編、編聯(lián)、束定、或兼顧音和意,稱(chēng)之為綁定。作者認(rèn)為:從意思上說(shuō),關(guān)聯(lián)比較確切, 也好理解。但是有些教程中用了聯(lián)編這個(gè)術(shù)語(yǔ)。 大家在看到這個(gè)名詞時(shí),應(yīng)當(dāng)知道指的就是本節(jié)介紹的關(guān)聯(lián)。

順便說(shuō)一句題外話,計(jì)算機(jī)領(lǐng)域中大部分術(shù)語(yǔ)是從外文翻譯過(guò)來(lái)的,有許多譯名是譯得比較好的,能見(jiàn)名知意的。但也有一些則令人費(fèi)解,甚至不大確切。例如在某些介紹計(jì)算機(jī)語(yǔ)言的書(shū)籍中,把project譯為“工程”,使人難以理解,其實(shí)譯為“項(xiàng)目”比較確切。 有些介紹計(jì)算機(jī)應(yīng)用的書(shū)中充斥大量的術(shù)語(yǔ),初聽(tīng)起來(lái)好像很唬人、很難懂,許多學(xué)習(xí) C++的人往往被大量的專(zhuān)門(mén)術(shù)語(yǔ)嚇住了,又難以理解其真正含義,不少人“見(jiàn)難而退”。 這個(gè)問(wèn)題成為許多人學(xué)習(xí)C++的攔路虎。因此,應(yīng)當(dāng)提倡用通俗易懂的方法去闡明復(fù)雜的概念。其實(shí),有許多看起來(lái)深?yuàn)W難懂的概念和術(shù)語(yǔ),捅破窗戶紙后是很簡(jiǎn)單的。建議讀者在初學(xué)時(shí)千萬(wàn)不要糾纏于名詞術(shù)語(yǔ)的字面解釋上,而要掌握其精神實(shí)質(zhì)和應(yīng)用方法。

說(shuō)明:與其他編程語(yǔ)言相比,例如Java、C#等,C++的語(yǔ)法是最豐富最靈活的,同樣也是最難掌握的,大家要循序漸進(jìn),莫求速成,在編程實(shí)踐中不斷翻閱和記憶。

前面所提到的函數(shù)重載和通過(guò)對(duì)象名調(diào)用的虛函數(shù),在編譯時(shí)即可確定其調(diào)用的虛函數(shù)屬于哪一個(gè)類(lèi),其過(guò)程稱(chēng)為靜態(tài)關(guān)聯(lián)(static binding),由于是在運(yùn)行前進(jìn)行關(guān)聯(lián)的, 故又稱(chēng)為早期關(guān)聯(lián)(early binding)。函數(shù)重載屬靜態(tài)關(guān)聯(lián)。

在調(diào)用虛函數(shù)時(shí)并沒(méi)有指定對(duì)象名,那么系統(tǒng)是怎樣確定關(guān)聯(lián)的呢?讀者可以看到,是通過(guò)基類(lèi)指針與虛函數(shù)的結(jié)合來(lái)實(shí)現(xiàn)多態(tài)性的。先定義了一個(gè)指向基類(lèi)的指針變量,并使它指向相應(yīng)的類(lèi)對(duì)象,然后通過(guò)這個(gè)基類(lèi)指針去調(diào)用虛函數(shù)(例如“pt->display()”)。顯然,對(duì)這樣的調(diào)用方式,編譯系統(tǒng)在編譯該行時(shí)是無(wú)法確定調(diào)用哪一個(gè)類(lèi)對(duì)象的虛函數(shù)的。因?yàn)榫幾g只作靜態(tài)的語(yǔ)法檢査,光從語(yǔ)句形式(例如“pt->display();”)是無(wú)法確定調(diào)用對(duì)象的。

在這樣的情況下,編譯系統(tǒng)把它放到運(yùn)行階段處理,在運(yùn)行階段確定關(guān)聯(lián)關(guān)系。在運(yùn)行階段,基類(lèi)指針變量先指向了某一個(gè)類(lèi)對(duì)象,然后通過(guò)此指針變量調(diào)用該對(duì)象中的函數(shù)。此時(shí)調(diào)用哪一個(gè)對(duì)象的函數(shù)無(wú)疑是確定的。例如,先使pt指向grad1,再執(zhí)行“pt->display()”,當(dāng)然是調(diào)用grad1中的display函數(shù)。由于是在運(yùn)行階段把虛函數(shù)和類(lèi)對(duì)象“綁定”在一起的,因此,此過(guò)程稱(chēng)為動(dòng)態(tài)關(guān)聯(lián)(dynamic binding)。這種多態(tài)性是動(dòng)態(tài)的多態(tài)性,即運(yùn)行階段的多態(tài)性。

在運(yùn)行階段,指針可以先后指向不同的類(lèi)對(duì)象,從而調(diào)用同一類(lèi)族中不同類(lèi)的虛函數(shù)。由于動(dòng)態(tài)關(guān)聯(lián)是在編譯以后的運(yùn)行階段進(jìn)行的,因此也稱(chēng)為滯后關(guān)聯(lián)(late binding) 。

C++虛析構(gòu)函數(shù)詳解

當(dāng)派生類(lèi)的對(duì)象從內(nèi)存中撤銷(xiāo)時(shí)一般先調(diào)用派生類(lèi)的析構(gòu)函數(shù),然后再調(diào)用基類(lèi)的析構(gòu)函數(shù)。但是,如果用new運(yùn)算符建立了臨時(shí)對(duì)象,若基類(lèi)中有析構(gòu)函數(shù),并且定義了一個(gè)指向該基類(lèi)的指針變量。在程序用帶指針參數(shù)的delete運(yùn)算符撤銷(xiāo)對(duì)象時(shí),會(huì)發(fā)生一個(gè)情況:系統(tǒng)會(huì)只執(zhí)行基類(lèi)的析構(gòu)函數(shù),而不執(zhí)行派生類(lèi)的析構(gòu)函數(shù)。

[例] 基類(lèi)中有非虛析構(gòu)函數(shù)時(shí)的執(zhí)行情況。為簡(jiǎn)化程序,只列出最必要的部分。

 

 
  1. #include <iostream> 
  2. using namespace std; 
  3. class Point //定義基類(lèi)Point類(lèi) 
  4. public
  5. Point( ){} //Point類(lèi)構(gòu)造函數(shù) 
  6. ~Point(){cout<<"executing Point destructor"<<endl;} //Point類(lèi)析構(gòu)函數(shù) 
  7. }; 
  8. class Circle:public Point //定義派生類(lèi)Circle類(lèi) 
  9. public
  10. Circle( ){} //Circle類(lèi)構(gòu)造函數(shù) 
  11. ~Circle( ){cout<<"executing Circle destructor"<<endl;} //Circle類(lèi)析構(gòu)函數(shù) 
  12. private
  13. int radius; 
  14. }; 
  15. int main( ) 
  16. Point *p=new Circle; //用new開(kāi)辟動(dòng)態(tài)存儲(chǔ)空間 
  17. delete p; //用delete釋放動(dòng)態(tài)存儲(chǔ)空間 
  18. return 0; 

這只是一個(gè)示意的程序。p是指向基類(lèi)的指針變量,指向new開(kāi)辟的動(dòng)態(tài)存儲(chǔ)空間,希望用detele釋放p所指向的空間。但運(yùn)行結(jié)果為:

 

 
  1. executing Point destructor 

表示只執(zhí)行了基類(lèi)Point的析構(gòu)函數(shù),而沒(méi)有執(zhí)行派生類(lèi)Circle的析構(gòu)函數(shù)。

如果希望能執(zhí)行派生類(lèi)Circle的析構(gòu)函數(shù),可以將基類(lèi)的析構(gòu)函數(shù)聲明為虛析構(gòu)函數(shù),如:

 

 
  1. virtual ~Point(){cout<<″executing Point destructor″<<endl;} 

程序其他部分不改動(dòng),再運(yùn)行程序,結(jié)果為:

 

  
  1. executing Circle destructor 
  2. executing Point destructor 

先調(diào)用了派生類(lèi)的析構(gòu)函數(shù),再調(diào)用了基類(lèi)的析構(gòu)函數(shù),符合人們的愿望。

當(dāng)基類(lèi)的析構(gòu)函數(shù)為虛函數(shù)時(shí),無(wú)論指針指的是同一類(lèi)族中的哪一個(gè)類(lèi)對(duì)象,系統(tǒng)會(huì)采用動(dòng)態(tài)關(guān)聯(lián),調(diào)用相應(yīng)的析構(gòu)函數(shù),對(duì)該對(duì)象進(jìn)行清理工作。

如果將基類(lèi)的析構(gòu)函數(shù)聲明為虛函數(shù)時(shí),由該基類(lèi)所派生的所有派生類(lèi)的析構(gòu)函數(shù)也都自動(dòng)成為虛函數(shù),即使派生類(lèi)的析構(gòu)函數(shù)與基類(lèi)的析構(gòu)函數(shù)名字不相同。

最好把基類(lèi)的析構(gòu)函數(shù)聲明為虛函數(shù)。這將使所有派生類(lèi)的析構(gòu)函數(shù)自動(dòng)成為虛函數(shù)。這樣,如果程序中顯式地用了delete運(yùn)算符準(zhǔn)備刪除一個(gè)對(duì)象,而delete運(yùn)算符的操作對(duì)象用了指向派生類(lèi)對(duì)象的基類(lèi)指針,則系統(tǒng)會(huì)調(diào)用相應(yīng)類(lèi)的析構(gòu)函數(shù)。

虛析構(gòu)函數(shù)的概念和用法很簡(jiǎn)單,但它在面向?qū)ο蟪绦蛟O(shè)計(jì)中卻是很重要的技巧。

專(zhuān)業(yè)人員一般都習(xí)慣聲明虛析構(gòu)函數(shù),即使基類(lèi)并不需要析構(gòu)函數(shù),也顯式地定義一個(gè)函數(shù)體為空的虛析構(gòu)函數(shù),以保證在撤銷(xiāo)動(dòng)態(tài)分配空間時(shí)能得到正確的處理。

構(gòu)造函數(shù)不能聲明為虛函數(shù)。這是因?yàn)樵趫?zhí)行構(gòu)造函數(shù)時(shí)類(lèi)對(duì)象還未完成建立過(guò)程,當(dāng)然談不上函數(shù)與類(lèi)對(duì)象的綁定。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美黄色小视频| 精品国产免费久久| 亚洲精品影院在线| 国产精品麻豆一区二区三区| 国产原创在线| 91av在线免费观看视频| 豆国产97在线 | 亚洲| 久久久久久亚洲综合| 国产在线视频不卡| 盗摄系列偷拍视频精品tp| 欧美女人天堂| 成人精品免费视频| 国内精品久久久久影院优| 海角国产乱辈乱精品视频| 欧美国产高跟鞋裸体秀xxxhd| 日日躁天天躁狠狠躁| 欧美在线一级片| 人人超碰91尤物精品国产| 国产精成人品2018| 99精品中文字幕在线不卡| 亚洲久久久久久久| 国产亚洲一区二区三区在线播放| 国产黄色免费在线观看| 欧美zozo| 男女啪啪a级毛片| 欧美主播福利视频| 久久久午夜电影| www.一区二区.com| 一区在线影院| 麻豆导航在线观看| 欧美videos粗暴高清性| 国产成人久久精品77777最新版本| 成人欧美magnet| 在线观看免费亚洲| 欧美熟女一区二区| 91九色在线porn| 免费观看在线综合色| 国产欧美一区二区三区在线| 国产精品久久久久久在线观看| 国产高清自产拍av在线| 成人av网站观看| 毛片不卡一区二区| av网站免费播放| 国产成人一区在线| 国产精品v欧美精品v日本精品动漫| 国产精品伦子伦| 无码人妻一区二区三区免费| 亚洲欧美精品午睡沙发| 欧美午夜精品理论片a级按摩| 国产欧美一区二区精品久久久| 国产极品嫩模在线视频一区| 亚洲wwwwww| 日本在线视频免费| 日韩免费大片| 亚洲精选一区二区| 国产亚洲成人av| 免费黄色av| 免费亚洲精品视频| va天堂va亚洲va影视| 国产真人真事毛片视频| 精品一区二区三区五区六区| 日本天堂影院在线视频| 成人毛片18女人毛片| 亚洲一区二区三区在线视频| 伊人av在线播放| 国产成人啪午夜精品网站男同| 色资源二区在线视频| 一区二区三区免费看| 精品香蕉一区二区三区| 日韩精品最新在线观看| 精品成人免费视频| 日本久久精品| 一区二区三区小视频| 含羞草www国产在线视频| 女同一区二区免费aⅴ| 日韩经典一区二区三区| 精品毛片三在线观看| 日本www视频在线观看| 国产在线精品自拍| 青青草手机在线观看| 精品久久久久久中文字幕一区奶水| 成本人h片动漫网站在线观看| 日本中文字幕免费在线观看| 欧美成人三级伦在线观看| 欧美 亚洲 另类 激情 另类| 久久久久久久午夜| 五月婷婷狠狠干| 神马影院一区二区三区| 国产精品视频一区二区三区,| 日韩av电影免费播放| 亚洲裸体视频| 精品久久久久久一区二区里番| 碰碰视频免费| 欧美日韩一区二区电影| 国产xxxx振车| 成人一区二区在线观看| 欧美一区二区三区成人| 都市激情亚洲| 欧美一区二区三区影视| 国产中文字幕乱人伦在线观看| 欧美成人明星100排名| 欧美日韩一区二区高清| 色综合天天综合网国产成人综合天| 欧美精品九九久久| 欧美毛片在线观看| 亚洲美女少妇无套啪啪呻吟| 一本—道久久a久久精品蜜桃| 久久久久午夜电影| 免费看黄色a级片| 色爽爽爽爽爽爽爽爽| 亚洲婷婷在线视频| 国产精品久久久对白| 国产福利视频一区二区三区| 亚洲网站视频福利| 久久精品伊人| 一区二区日韩精品| 人体私拍套图hdxxxx| 日韩福利视频导航| 中文字幕在线永久在线视频| 综合国产在线视频| wwwxxxx在线观看| 久久人妻精品白浆国产| 九九九伊在线综合永久| 99热99热| 国产草草影院ccyycom| 国产精品无码专区av免费播放| 在线观看欧美成人| 右手影院亚洲欧美| 美国黄色一级毛片| 成年女人在线看片| 国产麻豆日韩| 国产在线无码精品| 高潮久久久久久久久久久久久久| www.av88| 亚洲精品久久久| 中文字幕欧美色图| 亚洲国产日韩美| 在线看国产日韩| 伊人影院在线观看| 欧美美女激情18p| 成年人视频网站免费观看| 中文字幕一区二区三中文字幕| 国产精品超碰97尤物18| 一本色道综合亚洲| 色久欧美在线视频观看| 五月天婷婷影视| 18毛片免费看| 美女在线观看视频一区二区| 麻豆传媒在线完整视频| 久久久精品欧美丰满| 久久爱.com| 国产aaaaa毛片| 性色视频在线| 成人aa视频在线观看| 久久精品中文字幕一区| 亚洲图中文字幕| 欧美不卡视频在线观看| 一区在线视频观看| 最近的中文字幕在线看视频| 久久精品72免费观看| 日韩毛片在线播放| 国产a视频免费观看| 欧美xxxx黑人xyx性爽| 久久久久免费观看| 久草福利在线视频| 欧美曰成人黄网| 久久频这里精品99香蕉| 97精品国产福利一区二区三区| 午夜精品久久久久| 九九热视频免费在线观看| 中国一级大黄大黄大色毛片| 涩涩屋黄网站| 久久久久久久精| 欧美激情777| 先锋影音av在线| av电影免费在线观看| 亚洲欧洲精品一区二区| 天堂va在线高清一区| 4438x全国最大成人| 国产xxx69麻豆国语对白| 久久精品国产久精国产思思| 国产极品精品在线观看| 97在线免费公开视频| 日日躁夜夜躁人人揉av五月天| 久久无码精品丰满人妻| 99这里只有精品| 国产激情在线免费观看| 久久精品免视看国产成人| 理论片鲁丝二区爱情网| 三上悠亚激情av一区二区三区| 成人激情午夜影院| 91精品国产品国语在线不卡| 国产videos| 亚洲国产毛片aaaaa无费看| 亚洲在线一区二区三区| 欧美一级视频免费看| 美国黑人一级大黄| 国产盗摄——sm在线视频| 国产精品伦理一区二区三区| 欧美xxx黑人xxx水蜜桃| 日本亚洲欧美天堂免费| 欧美成人午夜激情视频| avove在线播放| 啊啊啊一区二区| 日本黄色免费在线| 国产资源中文字幕| 欧美精品一区二区三区在线看午夜| 日本一区二区视频在线| 亚洲精品国产熟女久久久| 无罩大乳的熟妇正在播放| 国产一级大片| 你懂的在线观看一区二区| 农民人伦一区二区三区| 国产日本亚洲高清| 日日狠狠久久偷偷综合色| 人妻无码视频一区二区三区| 日韩欧美在线不卡| 国产精品成人在线视频| 小早川怜子痴女在线精品视频| 777琪琪电影午夜理伦片| 天堂中文在线8| 欧美日韩亚洲国产综合| 亚洲精品日韩综合观看成人91| 日本一二区视频| 免费在线成人av电影| 二级片在线观看| 国产裸舞福利在线视频合集| 雨宫琴音一区二区三区| 国产精品亚洲一区二区三区在线| 国产美女被遭强高潮免费网站| 凹凸成人精品亚洲精品密奴| 极品久久久久久| 色诱视频网站一区| 欧美在线二区| 波多野结衣视频在线看| 免费中文日韩| 国产小视频在线免费观看| 亚洲影视第一页| 日韩不卡一区二区| 在线精品视频播放| bdsm精品捆绑chinese| 天堂视频免费看| 亚洲欧洲av另类| 日韩av在线免费观看不卡| 韩日成人影院| 国产aⅴ精品一区二区三区色成熟| 国产精品你懂得| 成人女人a毛片在线看| 九九热最新视频| 欧美xxx.com| 久香视频在线观看| 欧美一级理论片| 亚洲一区二区三区自拍| 国产综合久久久久久鬼色| 欧美私模裸体表演在线观看| 久久精品99国产国产精| 亚洲成在人线免费观看| 中文字幕少妇| 欧美电影完整版在线观看| 日韩高清精品免费观看| 一级黄色片在线播放| 久久久pmvav| 日韩欧美在线一区| 五月婷婷欧美视频| 欧美极品视频在线观看| 日本成人免费在线观看| 国产av无码专区亚洲a∨毛片| 国产日韩在线一区| 男人和女人做事情在线视频网站免费观看| 国产成人精品在线视频| 国产人妻精品午夜福利免费| 欧美亚洲色图校园春色| 972aa.com艺术欧美| 欧美韩国日本不卡| av大片在线| 男女爱爱福利视频| 实拍女处破www免费看| 高清视频在线观看三级| 青青草国产精品97视觉盛宴| 欧美激情性做爰免费视频| 日韩成人dvd| 久久好看免费视频| 捆绑变态av一区二区三区| 国产国语videosex另类| 天天噜噜噜噜噜噜| 一级黄色免费看| 国产精品久久波多野结衣| 久久婷婷五月综合色丁香| 在线观看wwwxxxx| 国产精品久久久久久久小唯西川| 亚洲成人激情在线| 一区二区视频在线观看免费的| 热舞福利精品大尺度视频| 国产精品久久久久久婷婷天堂| 最近2019年中文视频免费在线观看| 999www成人| 国产一区在线观看免费| 欧美精品九九久久| 福利视频导航网| 日韩在线视频中文字幕| 老师我好爽再深一点的视频| 成人在线视频中文字幕| 精品无码m3u8在线观看| www.99re7| 欧美日韩一卡二卡| 欧美福利在线| 日韩综合小视频| 尤物免费看在线视频| 另类调教123区| 91av在线影院| 日韩欧美一区二区一幕| 一本一本久久a久久精品综合小说| 日韩欧美a级成人黄色| 最近的中文字幕在线看视频| 欧美成人vr18sexvr| 亚洲国产高清在线| 精品一区二区不卡| 日本精品一区二区三区在线观看视频| 蜜臀av无码一区二区三区| 一级做a爱片久久| 欧美黑人巨大xxxxx| 亚洲国产成人午夜在线一区| 久久综合成人网| 99一区二区| 国语精品视频| 一道本一区二区| 91香蕉在线观看| 黄色福利在线观看|