面向对象的程序设计课件.pptVIP

面向对象的程序设计课件.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

*3.4虛函數與多態性3.4.1多態性多態性就是指同樣的消息被類的不同的對象接收時導致的完全不同的行為的一種現象。這裏所說的消息即對類成員函數的調用。C++支持兩種不同類型的多態:一種是編譯時的多態,另一種是運行時的多態。在編譯時的多態是通過靜態聯編實現的;而在運行時的多態則是通過動態聯編實現的。很明顯,函數的重載實現了一種多態性;這裏要講的多態性是建立在虛函數的概念和方法基礎之上,通過虛函數來實現的,而虛函數又必須存在於繼承的環境下。利用多態性,用戶能夠發送一般形式的消息,而將所有的實現細節留給了消息的對象,所以說多態性與數據封裝和繼承共同構成面向對象程式設計的三大機制。*3.4虛函數與多態性3.4.2子類型C++中的動態聯編是通過虛函數實現的,而要理解虛函數必須首先討論一個與之相關的概念,即子類型。如果一個特定的類型S,當且僅當它提供了類型T的行為時,則稱類型S是類型T的子類型。子類型體現了類型間的一般與特殊的關係。在C++中,子類型的概念是通過公有繼承(或公有派生)來實現的。根據繼承方式的概念,我們知道,按公有繼承的方式產生的派生類中,必然包含了原來基類中的全部成員。因此,一個公有派生類的對象可以提供其基類對象的全部行為(基類的全部介面),也就是說,在程式中可以把一個公有派生類對象當作其基類對象來處理。*3.4虛函數與多態性【例3-13】子類型的概念及實現示例。#includeiostream.hclassA//定義類A{private:inta;public:A(inti=0){a=i;}voidprint();};voidA::print(){coutInclassA,print()iscalled.endl;}*3.4虛函數與多態性classB:publicA//定義類B,類B是類A的公有派生類{private:intb;public:B(intj=-1){b=j;}};voidcommfun(Aaref){aref.print();}*3.4虛函數與多態性voidmain(){Aa;commfun(a);//以基類A的對象a作為實參調用函數commfunBb;commfun(b);//以派生類B的對象b調用函數commfun}程式的運行結果為:InclassA,print()iscalled.InclassA,print()iscalled.說明:*3.4虛函數與多態性(1)在本例中,類B是類A的公有派生類,函數commfun()的形參是一個基類A對象的引用,所以在main函數中,把基類A的對象a作為實參調用函數commfun()時,產生的結果是不言而喻的。但在main函數中,當把類B的對象b作為實參調用函數commfun()時,函數commfun()仍能正常工作,且列印結果與對象a作為實參時的結果相同,這說明,在程式中可以把一個公有派生類對象當作其基類對象來處理。(2)將類型B的對象b傳遞給函數commfun()處理是在程式運行時發生的。但在程式編譯時,編譯器只能對根源程式代碼進行靜態檢查。(3)子類型的重要性在於可以減輕程式員編寫程式代碼的負擔。*3.4虛函數與多態性3.4.3用基類指針指向公有派生類對象既然一個公有派生類對象可以當作基類對象使用,那麼,指向基類的指針自然也可以指向其公有派生類對象。因此,基類指針、派生類指針、基類對象和派生類對象四者間有以下四種組合的情況:(1)直接用基類指針指向基類對象。(2)直接用派生類指針指向派生類對象。(3)用基類指針引用其派生類對象。(4)用派生類指針引用基類對象。由於(1)、(2)兩種情況,指針類型和對象類型統一,因此完全行得通。*3.4虛函數與多態性對於第(3)種情況,由於可以把一個公有派生類對象當作基類對象處理,所以可以用基類指針指向其派生類對象。但必須注意的是,由於基類指針本身的類型並沒有改變,因此基類指針僅能訪問派生類中的基類部分。在程式中,當把派生類對象的指針賦給基類指針時,編譯器能自動完成隱式類型轉換。對於第(4)種情況,將派生類指針直接指向基類對象是危險的,因為編譯器不允許這麼做,也不提供隱式類型轉換。當然,程式員如果採用強制類型轉換,也可以把基類指針轉換為派生類指針,但這時要正確地使用該指針。*3.4虛函數與多態性【例3-14】基類指針、派生類指針、基類對象和派生類對象四者間組合的使用情況示例。#i

文档评论(0)

子不语 + 关注
官方认证
服务提供商

平安喜乐网络服务,专业制作各类课件,总结,范文等文档,在能力范围内尽量做到有求必应,感谢

认证主体菏泽喜乐网络科技有限公司
IP属地未知
统一社会信用代码/组织机构代码
91371726MA7HJ4DL48

1亿VIP精品文档

相关文档