第13章继承和组合.PDFVIP

  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文档。上传文档
查看更多
第13章继承和组合

下载 第1 3章 继承和组合 C + +最重要的性能之一是代码重用。但是,为了具有可进化性,我们应当能够做比拷贝代 码更多的工作。 在C 的方法中,这个问题未能得到很好的解决。而用 C + + ,可以用类的方法解决,通过创 建新类重用代码,而不是从头创建它们,这样,我们可以使用其他人已经创建并调试过的类。 关键是使用类而不是更改已存在的代码。这一章将介绍两种完成这件事的方法。第一种方 法是很直接的:简单地创建一个包含已存在的类对象的新类,这称为组合,因为这个新类是由 已存在类的对象组合的。 第二种方法更巧妙,创建一个新类作为一个已存在类的类型,采取这个已存在类的形式, 对它增加代码,但不修改它。这个有趣的活动被称为继承,其中大量的工作由编译器完成。继 承是面向对象程序设计的基石,并且还有另外的含义,将在下一章中探讨。 对于组合和继承(感觉上,它们都是由已存在的类型产生新类型的方法),它们在语法上 和行为上是类似的。这一章中,读者将学习这些代码重用机制。 13.1 组合语法 实际上,我们一直都在用组合创建类,只不过我们是在用内部数据类型组合新类。其实使 用用户定义类型组合新类同样很容易。 考虑下面这个在某种意义上很有价值的类: 在这个类中,数值成员是私有的,所以对于将类型 X 的一个对象作为公共对象嵌入到一个新 类内部,是绝对安全的。 256 C + +编程思想 下载 访问嵌入对象(称为子对象)的成员函数只须再一次选择成员。 如果嵌入的对象是 p r i v a t e 的,可能更具一般性,这样,它们就变成了内部实现的一部分 (这意味着,如果我们愿意,我们可以改变这个实现)。而对于新类的p u b l i c 接口函数,包含对 嵌入对象的使用,但不必模仿这个嵌入对象的接口。 这里,p e r m u t e ( ) 函数的执行调用了X 的接口,而X 的其他成员函数也在Y 的成员函数中被调用。 13.2 继承语法 组合的语法是明显的,而完成继承,则有新的不同的形式。 继承也就是说“这个新的类像那个老的类”。通过给出这个类的名字,在代码中声明继承, 在这个类体的开括号前面,加一冒号和基类名(或加多个类,对于多重继承)。这样做,就自 动地得到了基类中的所有数据成员和成员函数。下面是一个例子: 在Y 中,我们可以看到继承,它意味着 Y 将包含 X 中的所有数据成员和成员函数。实际 第13章 继承和组合 257 下载 上,Y包含了 X 的一个子对象,就像在 Y 中创建 X 的一个成员对象,而不从 X 继承一样。无 论成员对象还是基类存储,都被认为是子对象。在m a i n ( ) ,可以看到这些数据成员已被加入了, 因为s i z e o f ( Y )是s i z e o f ( X ) 的2倍大。 我们将注意到,基类由 p u b l i c 处理,否则,在继承中,所有被继承的东西都是 p r i v a t e ,也 就是说在基类中的所有 p u b l i c成员在派生类中都是 p r i v a t e 。这当然不是所希望的,希望的结果 是保持基类中的p u b l i c成员在派生类中也是p u b l i c 。这可在继承期间用关键字p u b l i c做到。 在c h a n g e ( ) 中,基类p e r m u t e ( ) 函数被调用,派生类对所有的p u b l i c基类函数都有直接的访问 权。 在派生类中的s e t ( )函数重定义了基类中的s e t ( )函数。这就是,如果对于类型 Y 的对象调用 函数r e a d ( )和p e r m u t e ( ) ,得到的是这些函数的基类版本(可以在m a i n ( ) 中看到表现)。但如果对 于对象 Y 调用 s e t ( ) ,得到的是重定义的版本。这意味着,如果我们不喜欢在继承中得到某个 函数的基类版本,可以改变它(还能够增加全新的函数,例如 c h a n g e ( ) )。 然而,当重定义函数时,我们

文档评论(0)

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

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

1亿VIP精品文档

相关文档