[计算机]3C++ OOP特性.pptVIP

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机]3COOP特性

面向对象程序设计与实践2 ——OOP特性 交换与智能控制研究中心 网络与交换技术国家重点实验室 网络技术研究院 北京邮电大学 北京邮电大学 面向对象的程序设计 程序设计 程序=算法+数据结构 程序= 对象+ 对象间的相互作用 面向对象程序设计的优势 提高软件质量:实现数据与方法的封装,通过方法来操作改变数据,提高了数据访问的安全性 易于理解和维护:更符合人脑对世界的认识和理解方式 支持软件重用,提高软件生产效率 … 北京邮电大学 C++是一种混合语言 C++是一种混合语言,不是纯粹的面向对象语言 面向对象的语言 Smalltalk是第一个真正面向对象的语言 Java,C# 北京邮电大学 OOP的关键概念——抽象 抽象 对具体问题(对象)进行分类概括,提取出这一类对象的共同性质并且加以描述的过程。 父类通常不对应真实的事物/问题 子类通常对应真实的事物/问题 注:与编程语言/程序设计无关 北京邮电大学 OOP的关键概念——封装、继承 封装 将抽象得到的数据和行为组合起来,并且对外隐藏实现细节 注:C++中的class,Java中的class和interface 继承 在已有类的设计基础上,进行更具体、更细化的设计。 注:C++中的“继承”,Java中的“实现”和“扩展” 北京邮电大学 OOP的关键概念——多态 多态 不同的派生类对同一个操作具有不同的行为实现。 注:通过虚函数来实现,C++需要借助指针机制 我有一个draw() 我的draw()画圆 我的draw()画矩形 北京邮电大学 继承的概念 子类是父类的一种特化(specialization) 因此,子类比父类更具体、范围更小 目的 为两个或者更多的派生类提供共有元素 提供更多的灵活性和扩展性 共享元素 子程序接口,内部实现,数据成员或数据类型等 避免多处出现重复的代码与数据 北京邮电大学 车 小轿车 大卡车 电话 固定电话 移动电话 GSM手机 CDMA手机 继承实例 “is-a”关系!! (Liskov替换原则) 北京邮电大学 继承的方式 继承方式 基类成员的访问权限 派生类对基类成员的访问权限 public 公有继承 public private protected public 不可见 protected private 私有继承 public private protected private 不可见 private protected 保护继承 public private protected protected 不可见 protected 接口继承 实现继承 接口 vs. 实现 接口(interface) 事物对外界体现的形式,包括接口和接口约束 例如,计算机学院教务科 通常(尽可能)保持不变,对外体现一致性 实现(implementation) 事物内部的处理机制、流程、方法等 例如,教务科的老师 很可能(甚至经常)改变,通过不变接口屏蔽变化细节 变化时,通常需要满足接口约束要求,如参数、执行行为等保持不变 常见原则:接口和实现分离 北京邮电大学 北京邮电大学 继承的内容 确保只继承需要继承的部分 派生类可以继承成员函数的接口和/或实现 三种基本情况 可覆盖的 不可覆盖的 提供默认实现 可覆盖的子程序 不可覆盖的子程序 未提供默认实现 抽象且可覆盖的子程序 不会用到,无意义 虚函数 非虚函数 纯虚函数 Override 北京邮电大学 函数类型举例 class Shape { public:   virtual void draw() const = 0;   virtual void error(const string msg);   int objectID() const;   ... }; class Rectangle: public Shape { ... }; class Ellipse: public Shape { ... }; Shape a; × 北京邮电大学 继承方式总结 声明纯虚函数的目的在于:使派生类仅仅只是继承函数的接口 声明虚函数的目的在于:使派生类继承函数的接口和缺省实现 声明非虚函数的目的在于:使派生类继承函数的接口和强制性实现 可覆盖的 不可覆盖的 提供默认实现 可覆盖的子程序 不可覆盖的子程序 未提供默认实现 抽象且可覆盖的子程序 不会用到 北京邮电大学 非虚函数不允许被覆盖 class B { public: virtual void mf1(); void mf2(); }; class D: public B { public: virtual void mf1(); void mf2(); }; D x; B *pB = x; pB-mf

文档评论(0)

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

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

1亿VIP精品文档

相关文档