- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象程序设计 同济大学 面向对象程序设计 面向对象程序设计 同济大学 面向对象程序设计 C++ 编程语言 面向对象的编程 内容大纲 类的关系与面向对象程序设计 继承、多态及其实现内幕 虚函数 类的继承体系的实现 面向对象程序设计 面向对象 面向对象程序设计(Object-Oriented Programming, OOP),与以往把类作为用户自定义数据类型、孤立地看待概念的想法的不同之处在于: 考察概念之间的联系及其组织关系 概念不是一系列的点,而是层次化的结构 比较善于表达”is-a”,“has-a”和”is-implemented-of”等关系 主要的特性:继承、多态 面向对象程序设计 类的设计 以数据为中心 关注类的内部数据结构 以行为为中心 关注类应该提供什么样的服务和接口 面向对象程序设计 面向对象程序设计 继承 所谓继承,是一些相关概念类的组织形式 通过继承,可以使它们共享一些共同的数据和行为 表现为父/子关系 父类(基类):定义了所有子类间共有的公共接口和私有实现 子类(派生类):可保留继承得来的、改写继承得来的,或新增原来未有的,以满足其特定的需求 面向对象程序设计 继承 一个继承体系的实例 若一个根类只是出于设计的需要,并不代表任何现实生活中真实的对象,我们可以称其为(概念上)抽象基类(Abstract Base Class) Lib Materials Books Magazines Files Rental Books Audio Books E-Books Abstract Base Class ? 面向对象程序设计 继承 A是基类 B是A的派生类 “继承”特性可以提高程序的可复用性 但是。。。 正因为“继承”太有用、太容易用,才要防止乱用“继承” class A{ public: void Func1(void); void Func2(void);};class B : public A{ public: void Func3(void); void Func4(void);};main(){ B b; // B的一个对象 b.Func1(); // B 从A 继承了函数Func1 b.Func2(); // B 从A 继承了函数Func2 b.Func3(); b.Func4();} 面向对象程序设计 继承的使用 如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能 如果类B 有必要使用A 的功能 若在逻辑上B 是A 的“一种”(a kind of ),则允许B 继承A 的功能 若在逻辑上A 是B 的“一部分”(a part of),则不允许B 继承A 的功能,而是要用A和其它东西组合出B class Human{…};class Man : public Human{…};class Boy : public Man{…}; Listen() Eat() Look() Smell() 面向对象程序设计 多态 class A{ public: void Func1(void);};void Test(A *a){ a-Func1();}class B : public A{…};class C : public A{…}; // Examplemain(){ A a; B b; C c; Test(a); Test(b); Test(c);}; 如果A 是基类,B 和C 是A 的派生类, 多态函数Test 的参数是A 的 指针。 那么Test 函数可以引用A、B、C 的对象。 面向对象程序设计 多态 多态(Polymorphism) 具有表现多种形态的能力的特征 通过基类的指针或者引用去操纵其派生类对象的方式 这样我们就在操纵这些具体对象的时候,得到了一种类型无关的透明性,因为我们操纵的都是其都共通的操作 同一段代码会操纵不同的对象,呈现不同的行为并得到迥然不同的结果 若继承体系发生变化,代码可以保持不变 面向对象程序设计 多态 void loan_check_in(LibMat mat) { mat.check_in(); if (mat.is_late()) mat.assess_fine(); if (mat.waiting_list()) mat.noti
文档评论(0)