网站大量收购闲置独家精品文档,联系QQ:2885784924

合肥工业大学程序设计基础课件第11章 类间关系的实现.ppt

合肥工业大学程序设计基础课件第11章 类间关系的实现.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 类间关系的实现 11.1 一般—特殊关系的实现 11.2 多态性与虚函数 11.3 整体—部分关系的实现 11.4 关联关系的实现 11.5 关于类层次的总结 11.1 一般—特殊关系的实现 11.1.1 类的继承与派生 11.1.2 赋值兼容规则 11.1.3 两义性与作用域分辨 11.1.1 类的继承与派生 1. 单一继承 11.1.1 类的继承与派生 2. 基类成员访问控制 11.1.1 类的继承与派生 3 多重继承 11.1.1 类的继承与派生 5. 派生类对象内存映像 11.1.2 赋值兼容规则 1. 派生类对象可以赋值给父类对象 11.1.3 两义性与作用域分辨 1. 作用域分辨 11.1.3 两义性与作用域分辨 2. 支配规则 11.1.3 两义性与作用域分辨 3. 虚基类 11.1.3 两义性与作用域分辨 11.2 多态性与虚函数 11.2.1 编译时刻的多态性 11.2.2 运行时刻的多态性 11.2.3 虚函数 11.2.4 纯虚函数与抽象类 11.2.1 编译时刻的多态性 函数重载为一种常见的编译时刻多态性,编译时通过参数类型匹配,定位所调用函数的具体实现,然后用该实现代码调用代替源程序中的函数调用。 11.2.2 运行时刻的多态性 运行时刻多态性的实现机制是动态联编,在程序运行时刻确定所要调用的是哪个具体函数实现,这种联编形式的程序运行效率低于静态联编,因为要花额外开销去推测所调用的是哪一个函数。虽然动态联编的运行效率低于静态联编,但是动态联编为程序的具体实现带来了巨大的灵活性,使得对变化万千的问题空间对象的描述变得容易,使函数调用的风格比较接近人类的习惯。 11.2.3 虚函数 类的一个成员函数被说明为虚函数表明它目前的具体实现仅仅是一种假设,只是一种适用于当前类的实现,在未来类的派生链条中有可能重新定义这个成员函数的实现 (override)。虚函数的使用方法如下: 11.2.3 虚函数 11.2.3 虚函数 11.2.3 虚函数 11.2.3 虚函数 11.2.3 虚函数 11.2.4 纯虚函数与抽象类 软件系统的功能由类层次中的各类所实现,不同的类提供了相应层次的功能实现,通过类的用户接口可以调用这些功能,人们通常所习惯的不是将功能在不同类层次的实现用不同的接口表示,而是将概念上相似的功能用一个统一的接口在最顶层表示,例如:一个系统可能提供了“打印”这一功能,但“打印”对其各组成部分的含义不同,可能包括打印文本文件、打印照片、打印图形等,这些打印功能的具体实现由各个类提供,但对整个系统来讲它们应该具有相同的接口,在调用时应能够根据具体情况调用其具体实现。虚函数可以帮助我们做到这一点,若干概念上相似的操作可以用一个虚函数描述,该虚函数在较高层次上表示一种功能的接口,而在不同类中对该虚函数的重新定义就是该项功能不同层次上的实现,虚函数调用机制可保证虚函数的某个恰当的实现被调用。也就是说,利用虚函数,可以使系统中多个相似的功能具有统一的接口,改善了类的用户接口。方式如下: 11.3 整体—部分关系的实现 C++对整体—部分关系提供支持手段,对复合聚合,采用嵌入式对象的方式,即属性的类型为类,例如消息窗口类可以如下定义: 11.4 关联关系的实现 同许多面向对象编程语言一样,对关联的实现C++没有提供专用语法,编程者可以使用指向类的指针、成员对象等语法实现分析设计阶段描述的关联结构,与实现整体-部分结构类似,实际上整体-部分结构在UML中是以关联特例的身份出现的。 11.5 关于类层次的总结 11.5.1 认知规律与类层次 11.5.2 构造函数的一般形式 11.5.3 成员函数的特征 (略) public: void SetStudent(CStudent* pStudents) { m_pStudent=pStudent; } CGroup(int nID) { m_nGroupID=nID; m_pStudents=new CStudnet[5]; … //小组由5名学生组成 } … }; class CClass { private: CStudent* m_pStudents; int m_nClassID; … public: CClass(int nID) { m_nClassID=nID; m_pStudents=new CStudnet[35]; //班级由35名学生组成 … } CStudent* GetStudent() { return m_pStudents; } void SetStudent(CStu

文档评论(0)

ormition + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档