




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+学习笔记(12)多态与虚函数1多态性多态的概念:l 在面向对象的概念中,多态性是指不同对象收到相同消息时,根据对象类不同产生不同的动作。C+允许程序员发送相同消息到不同的相关对象,而由对象决定如何完成该动作,并且支持软件选择实现决策的时间。其中,运行时的多态是面向对象的程序设计语言所独有的。有人还认为,只有与动态联编相结合的多态才是真正的面向对象的多态。多态的特点:l 提供了把接口与实现分开的另一种方法;l 提高了代码的组织性和可读性,更重要的是它使软件的可扩充性有了充分的提高;l 是OOP的一个重要特征,提供了丰富的逻辑关系清晰的描述对象方法的手段,提高了软件功能和版本进化的设计维护能力。C+支持两种多态性:l 编译时多态:程序运行前发生的事件函数重载、运算符重载静态绑定l 运行时多态:程序运行时发生的事件虚函数机制 动态绑定 2函数绑定(function call binding)绑定:将函数调用与函数体连接起来叫做绑定。预绑定(early binding):绑定在程序运行之前进行(由编译器和连接器执行),也叫静态联编。后绑定(late binding):编译器在编译时未确定要调用的函数,必须根据程序运行所产生的信息来通知调用哪一个函数,也叫动态联编。C语言就只有一种绑定方式就是预绑定。 预绑定与后绑定的区别:预绑定:l 意味着绑定基于的信息都是静态的,是编译和连接时就可以确定的;l 编译系统根据指针(或引用)本身的类型,而不是它所指向的对象的类型来进行绑定;l 预绑定的实体包括一般函数、重载函数、非虚成员函数和非虚友元函数。后绑定:l 在运行时,根据对象类型的不同来选择合适的函数调用,这些类型信息在编译时是不可知的,故只能用后绑定解决这一问题;l 拥有虚函数的类对象中,必然包含着相应的类型信息,否则动态绑定不可能实现;l 编译时的多态的实现,取决于程序的静态信息是否足够为相同的程序实体确定不同的标识符。这里的程序实体,是指程序代码中的各种名称和代码段;l 要实现运行时的多态,进行动态联编,就必须使用虚函数。 编译时的多态,表现在以下几方面:l 对于在一个类中说明的重载,编译系统根据重载函数的参数个数、类型以及顺序的差别,来分别调用相应的函数;l 对于在基类和派生类中重载函数,即使所带参数完全相同,由于它们属于不同的类,在编译时可以根据对象名前缀来加以区别;或者使用“类名:”前缀,也可以指示编译器分辨出应该调用哪个类的成员函数;l 调用编译时绑定的函数,优点是高效率,因为编译系统可以在运行前对代码进行优化;缺点是缺少灵活性,不能满足程序的可扩充性要求。 例1:编写基类、派生类、子派生类,在基类中定义虚函数,并全部实现,定义每个类的对象,观察每种对象的大小及其内存分配规律。 代码如下: /*/*虚函数彻底研究*/#include/基类classCBx;public:CBase(intn).x=n;CBase().virtualvoidSetX(intn).x=n;virtualintGetX().returnx;/派生类classCDerive:publicCBx;public:CDerive(intn1,intn2):CBase(n1).x=n2;CDerive().voidSetX(intn).x=n;intGetX().returnx;/子派生类classCSubDerive:publicCDx;public:CSubDerive(intn1,intn2,intn3):CDerive(n1,n2).x=n3;CSubDerive().voidSetX(intn).x=n;intGetX().returnx;voidmain().coutCBasesize=sizeof(CBase)endl;coutCDerivesize=sizeof(CDerive)endl;coutCSubDerivesize=sizeof(CSubDerive)endl;CBaseobj1(1);CDeriveobj2(2,3);CSubDeriveobj3(4,5,6);CBase*pObj1=&obj1;CDerive*pObj2=&obj2;CSubDerive*pObj3=&obj3;CBase*pObj=.pObj1,pObj2,pObj3; 1. 运行结果: 2. 对象的地址及内容: 可以看出,子派生类的前4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高端会计选拔考试题库(附答案)
- 再验证培训试题及答案
- 聊城语文中考试题及答案
- 负极材料工厂管理办法
- 上海医保基金管理办法
- 严重破产风险管理办法
- 交通运输客运管理办法
- 落实社团管理办法情况
- 融资租赁管理办法修订
- 管理类培训管理办法
- GB/T 45972-2025装配式建筑用混凝土板材生产成套装备技术要求
- 电力营销稽查培训课件
- 牛津译林版英语七年级上册Unit1Comic strip and Welcome to the unit随堂练习(含答案)
- 拔牙知情同意书
- 国防战备公路工程可行性研究报告
- 《假期有收获》PPT课件
- 项目建设全过程管理经典讲义(PPT)
- 关于“成立安全领导小组”的通知
- 体育馆屋面专项施工方案(22页)
- 个人分期还款协议书的范本
- 急性重症胰腺炎诊治流程
评论
0/150
提交评论