999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析C++多態的作用及實現原理

2014-09-24 00:07:42李明明管志偉
無線互聯科技 2014年7期

李明明 管志偉

摘要:簡要分析了虛函數,純虛函數,函數的重載和覆蓋,著重描述了多態的概念,綁定,使用方法以及實現原理。

關鍵詞:多態;虛函數;動態綁定;靜態綁定多態(polymorphism)一詞最初來源于希臘語polumorphos,含義是具有多種形式或形態的情形。在程序設計領域,C++是目前面向對象語言中使用最廣泛的語言之一,多態性是面向對象的核心技術,理解多態,是掌握面向對象程序設計的必經之路。

為了理解多態,我們必須清楚什么是虛函數?什么是純虛函數?為什么要引入虛函數和純虛函數?它們在多態的實現上分別有什么作用?它們之間又有什么區別?

1虛函數

定義:用virtual關鍵字申明的函數叫做虛函數,虛函數肯定是類的成員函數。

引入原因:為了方便使用多態特性,我們需要在基類中定義虛函數。

作用:虛函數的作用是實現動態聯編,也就是在程序的運行階段動態地選擇合適的成員函數,。

這里注意:抽象類即含有純虛函數的類。

2純虛函數

定義:虛函數再加上=0。

引入原因:在很多情況下,基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出熊貓、野豬等子類,但動物本身生成對象明顯不合常理。為了解決上述問題,將函數定義為純虛函數,若要使派生類為非抽象類,則編譯器要求在派生類中,必須對純虛函數予以重寫以實現多態性。

作用:通過基類的派生類以純虛函數為接口實現有意義的虛函數定義。

虛函數和純虛函數的區別

⑴虛函數的作用是這個函數在子類里面可以被重載,運行時動態綁定實現多態純虛函數是個接口,在基類中不實現,要等到子類中去實現。

⑵虛函數在子類里可以不重載,但是虛函數必須在子類里去實現。

輔助性理論分析結束,跨入正題,什么是多態?多態的作用是什么?它的實現原理具體是什么?

⑴定義:對于面向對象程序設計(OOP)的核心——“多態”,引用Charlie Calverts對多態的描述——“多態”即是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單地說就是“一個接口,多種方法”。

⑵作用:把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

3實現原理

因為編譯器在編譯的時候,就已經確定了對象調用的函數的地址,默認執行基類中函數方法,此時屬于靜態綁定。為了能在派生類中使用名稱相同但執行命令不同的方法,就必須要使用動態綁定(late binding)技術,即函數調用的地址在運行時才確定。要讓編譯器采用動態綁定,就要在基類中聲明函數時使用virtual關鍵字。

編譯器在編譯的時候,會為每個包含虛函數的類創建一個虛表(即vtable),前面已經提到,該表是一個一維數組,在這個數組中存放每個虛函數的地址。

那么如何定位虛表呢?

編譯器另外還為每個類的對象提供了一個虛表指針(即vptr),這個指針指向了對象所屬類的虛表。在程序運行時,根據對象的類型去初始化vptr,從而讓vptr正確的指向所屬類的虛表,從而在調用虛函數時,就能夠找到正確的函數。

在虛表指針沒有正確初始化之前,我們不能夠去調用虛函數。那么虛表指針在什么時候,或者說在什么地方初始化呢?

在構造函數中進行虛表的創建和虛表指針的初始化。對于虛函數調用來說,每一個對象內部都有一個虛表指針,該虛表指針被初始化為本類的虛表。所以在程序中,不管你的對象類型如何轉換,但該對象內部的虛表指針是固定的,因此,動態的對象函數調用得以實現,這就是C++多態性實現的原理。

4結語

類的多態性,是指用虛函數和延遲綁定來實現的。函數的多態性是函數的重載。一般情況下(沒有涉及virtual函數),當我們用一個指針調用一個函數的時候,被調用的函數是取決于這個指針的類型。除此之外,當設計到多態性的時候,采用了虛函數和動態綁定,此時的調用就不會在編譯時候確定而是在運行時確定。

[參考文獻]

[1](美)stanley B.LippmanBarbara E.Moo joseeLajoie著.李師賢,等,譯.C++ primer.人民郵電出版社.2006.

[2](美)普拉塔(prata,S)著.孫建春,韋強,譯.C++ primer plus.人民郵電出版社.2005.

[3](美)埃克爾(Bruce Eckel),(美) Chuck Allison.劉宗田,袁兆山,潘秋菱,等,譯.C++編程思想.機械工業出版社.2011.

主站蜘蛛池模板: 欧美综合在线观看| 久久这里只有精品23| 午夜限制老子影院888| 国产在线麻豆波多野结衣| 99re这里只有国产中文精品国产精品 | 亚洲欧美另类中文字幕| 丰满的熟女一区二区三区l| 手机永久AV在线播放| 波多野结衣中文字幕久久| 四虎精品国产AV二区| 人妻一本久道久久综合久久鬼色| 国产后式a一视频| 99视频精品全国免费品| 激情综合激情| 怡红院美国分院一区二区| 亚洲日韩精品综合在线一区二区| 99久久精品美女高潮喷水| 亚洲精品片911| 青青久视频| 片在线无码观看| 国产精品免费电影| 91小视频在线观看| 制服丝袜一区| 亚洲日本中文综合在线| 激情网址在线观看| 国产乱人乱偷精品视频a人人澡| 亚洲AV无码不卡无码| 国产精品私拍在线爆乳| 国产欧美在线观看精品一区污| 国产欧美日韩精品综合在线| a色毛片免费视频| 亚洲天堂.com| 国产激爽爽爽大片在线观看| 看你懂的巨臀中文字幕一区二区| 亚洲国产欧美国产综合久久| 国产激情无码一区二区APP| 又大又硬又爽免费视频| 亚洲国产精品成人久久综合影院| 99视频精品全国免费品| 成人一区在线| 国产爽歪歪免费视频在线观看| 日韩一级二级三级| 亚洲成肉网| 欧洲亚洲欧美国产日本高清| 91口爆吞精国产对白第三集| 欧美天天干| 奇米影视狠狠精品7777| 色综合久久88| 国产精品天干天干在线观看 | 91精品国产麻豆国产自产在线| 久久国产高清视频| 99在线观看精品视频| av尤物免费在线观看| 午夜视频免费一区二区在线看| 色偷偷男人的天堂亚洲av| 白丝美女办公室高潮喷水视频| 国产剧情伊人| 一本一道波多野结衣一区二区 | 欧美亚洲激情| 亚洲日韩精品无码专区| 国内嫩模私拍精品视频| 一本一本大道香蕉久在线播放| 91色爱欧美精品www| 蜜桃视频一区二区| 亚洲第一天堂无码专区| 久热re国产手机在线观看| 毛片久久久| 国产精品2| 毛片在线区| 中国毛片网| 人妻丰满熟妇啪啪| 99尹人香蕉国产免费天天拍| 青青青国产在线播放| 亚洲精品国产首次亮相| 欧美一级99在线观看国产| 国产丰满大乳无码免费播放| 欧美区一区| 啪啪啪亚洲无码| 国产91色| 免费中文字幕一级毛片| 久爱午夜精品免费视频| 久久a级片|