面向对象编程(C++)精品教学:第11章.pptVIP

面向对象编程(C++)精品教学:第11章.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 对象成员的类型可以是本派生类的基类,也可以是另外一个已定义的类。在一个类中以另一个类的对象作为数据成员的,称为类的组合(composition)。 例如,声明Professor(教授)类是Teacher(教师)类的派生类,另有一个类BirthDate(生日),包含year, month, day等数据成员。可以将教授生日的信息加入到Professor类的声明中。如 11.8 继承与组合 class Teacher//教师类 { public: ┆ private: int num; string name; char sex; }; class BirthDate //生日类 { public: ┆ private: int year; int month; int day; }; class Professor:public Teacher //教授类 {public: ┆ private: BirthDate birthday; //BirthDate类的对象作为数据成员 }; 类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。 Professor类通过继承,从Teacher类得到了num,name,age,sex等数据成员; Professor类通过组合,从BirthDate类得到了year,month,day等数据成员。 继承是纵向的,组合是横向的。 如果定义了Professor对象prof1,显然prof1包含了生日的信息。通过这种方法有效地组织和利用现有的类,大大减少了工作量。 如果有 void fun1(Teacher ); void fun2(BirthDate ); 在main函数中调用这两个函数: fun1(prof1);//正确,形参为Teacher类对象的引用,实参为Teacher类的子类对象,与之赋值兼容 fun2(prof1.birthday);//正确,实参与形参类型相同,都是BirthDate类对象 fun2(prof1);//错误,形参要求是BirthDate类对象,而prof1是Professor类型,不匹配 有了继承,使软件的重用成为可能。继承是C++和C的最重要的区别之一。 由于C++提供了继承的机制,这就吸引了许多厂商开发各类实用的类库。用户将它们作为基类去建立适合于自己的类(即派生类),并在此基础上设计自己的应用程序。 类库的出现使得软件的重用更加方便,现在有一些类库是随着C++编译系统卖给用户的。读者不要认为类库是C++编译系统的一部分。不同的C++编译系统提供的由不同厂商开发的类库一般是不同的。 11.9 继承在软件开发中的重要意义 对类库中类的声明一般放在头文件中,类的实现(函数的定义部分)是单独编译的,以目标代码形式存放在系统某一目录下。用户使用类库时,不需要了解源代码,但必须知道头文件的使用方法和怎样去连接这些目标代码(在哪个子目录下),以便源程序在编译后与之连接。 由于基类是单独编译的,在程序编译时只需对派生类新增的功能进行编译,这就大大提高了调试程序的效率。如果在必要时修改了基类,只要基类的公用接口不变,派生类不必修改,但基类需要重新编译,派生类也必须重新编译,否则不起作用。 人们为什么这么看重继承,要求在软件开发中使用继承机制,尽可能地通过继承建立一批新的类?为什么不是将已有的类加以修改,使之满足自己应用的要求呢? (1) 有许多基类是被程序的其他部分或其他程序使用的,这些程序要求保留原有的基类不受破坏。 (2) 用户往往得不到基类的源代码。 (3) 在类库中,一个基类可能已被指定与用户所需的多种组件建立了某种关系,因此在类库中的基类是不容许修改的。 (4) 实际上,许多基类并不是从已有的其他程序中选取来的,而是专门作为基类设计的。 (5) 在面向对象程序设计中,需要设计类的层次结构,从最初的抽象类出发,每一层派生类的建立都逐步地向着目标的具体实现前进。 * * * * * * * * * * * * * * * * * * * * * * * * * * * 可以将派生类构造函数在类外面定义,而在类体中只写该函数的声明: Student1(int n,string nam,char s,int a,string ad); 在类的外面定义派生类构造函数: Student1∷Student1(int n,string nam,char s,int a,string a

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档