C++学习笔记(15)——静态绑定和动态绑定.docVIP

C++学习笔记(15)——静态绑定和动态绑定.doc

  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文档。上传文档
查看更多
C++学习笔记(15)——静态绑定与动态绑定 ??????????????????????? 静态绑定:编译时绑定,通过对象调用 动态绑定:运行时绑定,通过地址实现 ???????????????????????? C++的多态性 ??????????????????????? ?静态多态性:函数多态性——函数重载 ? ???????????????????????? 模板多态性——C++模板(类模板、函数模板) ?动态多态性:虚函数(只有用地址才能实现动态多态性) ???????????????????????? 只有采用“指针-函数()”或“引用变量.函数()”的方式调用C++类中的虚函数才会执行动态绑定。对于C++中的非虚函数,因为其不具备动态绑定的特征,所以不管采用什么样的方式调用,都不会执行动态绑定。 ?????????????? ???? C++语言成员函数的调用和绑定方式总结 代码形式 对于虚函数 对于非虚函数 作用 绑定方式 作用 绑定方式 类名::函数() 调用指定类的指定函数 静态绑定 调用指定类的指定函数 静态绑定 对象名.函数() 调用指定对象的指定函数 静态绑定 调用指定对象的指定函数 静态绑定 引用变量.函数() 调用被引用对象所属类的指定函数 动态绑定 调用引用变量所属类的指定函数 静态绑定 指针-函数() 调用被引用对象所属类的指定函数 动态绑定 调用指针变量所属类的指定函数 静态绑定 ???????????????????????????? 注:被引用对象所属类 是 指针 或 引用 指向的对象的实际类型; 引用变量所属类、指针变量所属类 是 定义 引用变量、指针变量的类型; 以上两种类型可能相同,也可能不同。 ???????????????????????? 从上表可以看出,执行动态绑定的只有通过地址,即只有通过指针或引用变量才能实现,而且还必须是虚函数。从概念上来说,虚函数机制只有在应用于地址时才有效,因为地址在编译阶段提供的类型信息不完全。 ??????????????? ??????????????? 例:编写程序观察虚函数和非虚函数的绑定行为: ???????????????? ?????????? 代码如下: ????????????? /************************************************************************ *?动态绑定与静态绑定 ************************************************************************/ #include?iostream.h class?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对象)的函数 } ?????????????? ????????????? 运行结果: ??????????

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档