- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.3.3 虚基类及其派生类的构造函数 虚基类的声明是在定义派生类时完成: class 派生类名:virtual 访问方式 基类名 { //声明派生类成员 }; 虚基类:虽然被一个派生类间接地多次继承,但派生类却只继承一份该基类的成员。 对于虚基类的任何派生类,其构造函数不仅负责调用直接基类的构造函数,还需调用虚基类的构造函数。 北京林业大学 软件教研室 * 若基类B被声明为虚基类,则: 派生类D3负责调用3个基类(直接基类D1、D2和虚基类B)的构造函数; 而派生类D1和D2不会调用虚基类B的构造函数,只由最终端的派生类D3负责调用虚基类的构造函数。 【例7-10】按照如上图所示的类和它们之间的继承与派生关系,设计对应的类和相关的构造函数,将类B声明为虚基类,并测试虚基类的作用,注意虚基类构造函数的执行次数。 B D1 D2 D3 北京林业大学 软件教研室 * 北京林业大学 软件教研室 * 解决二义性的两种方法比较 作用域运算符: 在派生类中拥有同名成员的多个拷贝,分别通过直接基类名来惟一标识同名成员,可以存放不同的数据,进行不同的操作。 可以容纳更多的数据。 虚基类: 只维护一个成员拷贝。 使用更为简洁,内存空间更为节省。 北京林业大学 软件教研室 * 7.4 虚函数与多态性 多态就是考虑在不同层次的类中,以及在一个类的内部,同名成员函数之间的关系问题,是解决功能和行为的再抽象问题。 也就是说,多态是指类族中具有相似功能的不同函数使用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。 北京林业大学 软件教研室 * 7.4.1 多态性 多态性就是指同样的消息被类的不同对象接收时导致的完全不同的行为的一种现象。 这里所说的消息即对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 多态性实质是指同一个函数的多种形态。 北京林业大学 软件教研室 * 联编: 是指把一个消息和一个方法联系在一起 也就是把一个函数名与其实现代码联系在一起 实质是把一个标识符名和一个存储地址联系在一起的过程。 根据实现联编的阶段的不同,可将其分为静态联编和动态联编两种。 这两种联编过程分别对应着多态的两种实现方式。 在编译时的多态是通过静态联编实现的 而在运行时的多态则是通过动态联编实现的。 普通函数及类的成员函数的重载就实现了一种多态性。 北京林业大学 软件教研室 * 在继承与派生的环境中: 当通过对象名调用某个成员函数时,只可能是调用对象自身的成员,所以,这种情况可采用静态联编实现。 当通过基类指针调用成员函数时,只有在运行时才能确定实际操作对象的类,并由此确定应该调用哪个类中的成员函数,这种运行时的多态性是由对象赋值的兼容规则所引起的。 北京林业大学 软件教研室 * 7.4.2 赋值兼容规则 赋值兼容规则是指在公有继承情况下,对于某些场合,一个派生类的对象可以作为基类对象来使用,也就是在需要基类对象的任何地方都可以使用公有派生类的对象来替代。 北京林业大学 软件教研室 * 赋值兼容规则包括以下三种情况(假设类B为基类,类D为类B的公有派生类): (1)派生类的对象可以赋值给基类对象 D d; B b; b=d; (2)派生类的对象可以初始化为基类的引用 D d; B b=d; (3)派生类对象的地址可以赋给指向基类的指针 D d; B *bp=d; 北京林业大学 软件教研室 * 基类指针指向公有派生类对象 Base Derive 公有继承 基类成员 基类成员 新增成员 北京林业大学 软件教研室 * 由上述对象赋值兼容规则可知: 一个基类的对象可兼容派生类的对象; 一个基类的指针可指向派生类的对象; 一个基类的引用可引用派生类的对象; 于是,对于通过基类的对象指针(或引用)对成员函数的调用,编译时无法确定对象的类,而只有在运行时才能确定并由此确定该调用哪个类的成员函数。 一个公有派生类的对象可以提供其基类对象的全部行为(基类的全部接口); 也就是说,在程序中可以把一个公有派生类对象当作其基类对象来处理。 【例7-11】赋值兼容规则的概念及实现示例。 北京林业大学 软件教研室 * 7.4.3 用基类指针指向公有派生类对象 基类指针、派生类指针、基类对象和派生类对象四者间有以下4种组合的情况: (1)直接用基类指针指向基类对象。 (2)直接用派生类指针指向派生类对象。 (3)用基类指针引用其派生类对象。 (4)用派生类指针引用基类对象。 【例7-12】基类指针、派生类指针、基类对象和派生类对象4者间组合的使用情况示例。 基类指针仅能访问派生类中的基类部分 强制类型转换 北京林业大学 软件教研室 * 引入虚函数 阅读下列程序,并
您可能关注的文档
最近下载
- 2025年考研政治原题 .pdf VIP
- 人教版七年级语文下册期末复习古诗词默写练习(含答案) (2).doc VIP
- DB15_T 3585-2024 高标准农田施工质量评定规程.docx VIP
- 2025年山东发展投资控股集团有限公司人员招聘笔试备考试题及答案详解(各地真题).docx VIP
- PISA国际评价(15岁)2015年科学素养试卷.pdf VIP
- 标准、规范_JGT 411-2013 电动卷门开门机.pdf
- 体育开学第一课体育与健康.pptx VIP
- 5G优化案例:2.1G L-NR频谱共享干扰对比及DSS功能研究.docx VIP
- 消防安全责任人、管理人、专(兼)职管理人员消防安全培训.pptx
- KISSsoft齿轮材料的自定义20CrMnTi.pdf VIP
原创力文档


文档评论(0)