- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++学习笔记(15)——静态绑定与动态绑定
???????????????????????
静态绑定:编译时绑定,通过对象调用
动态绑定:运行时绑定,通过地址实现
????????????????????????
C++的多态性
???????????????????????
?静态多态性:函数多态性——函数重载
? ???????????????????????? 模板多态性——C++模板(类模板、函数模板)
?动态多态性:虚函数(只有用地址才能实现动态多态性)
????????????????????????
只有采用“指针-函数()”或“引用变量.函数()”的方式调用C++类中的虚函数才会执行动态绑定。对于C++中的非虚函数,因为其不具备动态绑定的特征,所以不管采用什么样的方式调用,都不会执行动态绑定。
??????????????
???? C++语言成员函数的调用和绑定方式总结
代码形式
对于虚函数
对于非虚函数
作用
绑定方式
作用
绑定方式
类名::函数()
调用指定类的指定函数
静态绑定
调用指定类的指定函数
静态绑定
对象名.函数()
调用指定对象的指定函数
静态绑定
调用指定对象的指定函数
静态绑定
引用变量.函数()
调用被引用对象所属类的指定函数
动态绑定
调用引用变量所属类的指定函数
静态绑定
指针-函数()
调用被引用对象所属类的指定函数
动态绑定
调用指针变量所属类的指定函数
静态绑定
????????????????????????????
注:被引用对象所属类 是 指针 或 引用 指向的对象的实际类型;
引用变量所属类、指针变量所属类 是 定义 引用变量、指针变量的类型;
以上两种类型可能相同,也可能不同。
????????????????????????
从上表可以看出,执行动态绑定的只有通过地址,即只有通过指针或引用变量才能实现,而且还必须是虚函数。从概念上来说,虚函数机制只有在应用于地址时才有效,因为地址在编译阶段提供的类型信息不完全。
???????????????
???????????????
例:编写程序观察虚函数和非虚函数的绑定行为:
????????????????
??????????
代码如下:
?????????????
/*************************************************************************?动态绑定与静态绑定************************************************************************/#include?iostream.hclass?CBase{public:????virtual?int?func()?const????//虚函数????{????????coutCBase?function! ;????????return?100;????}};class?CDerive?:?public?CBase{public:????int?func()?const????????//在派生类中重新定义虚函数????{????????coutCDerive?function! ;????????return?200;????}};void?main(){????CDerive?obj1;????CBase*?p1=obj1;????CBase?p2=obj1;????CBase?obj2;????obj1.func();????//静态绑定:调用对象本身(派生类CDerive对象)的?func?函数????p1-func();????//动态绑定:调用被引用对象所属类(派生类CDerive)的?func?函数????p2.func();????//动态绑定:调用被引用对象所属类(派生类CDerive)的?func?函数????obj2.func();????//静态绑定:调用对象本身(基类CBase对象)的函数}
??????????????
?????????????
运行结果:
??????????
您可能关注的文档
最近下载
- 22J403-1 楼梯 栏杆 栏板(一) (3).pdf VIP
- 口腔科门诊护士接诊流程ppt新版【16页】.pptx VIP
- 课件:土壤有机质的测定.ppt VIP
- 2025年蜀道投资集团有限责任公司招聘笔试备考试题及答案解析.docx VIP
- 材料与试验协会 E 3-2001金相试样的制备方法(中文版).pdf VIP
- 设备台账标准格式.xls VIP
- 动火作业施工方案模板.docx
- 玩家国度ROG STRIX Z790-E GAMING WIFI 主板 ROG STRIX Z790-E GAMING WIFI 简体中文版使用手册.pdf
- 2025年蜀道投资集团有限责任公司招聘笔试备考题库及一套答案详解.docx
- 2025年辅警招考时事政治考题及答案.docx VIP
文档评论(0)