第10章 实现继承.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 实现继承

警告:仅当必要时才使用私有或保护继承。 对于大多数使用私有继承的情形(如car和Motor之间的私有继承关系),更好的选择是,将基类对象作为派生类的一个成员属性。通过继承motor类,相当于对car类进行了限制,使其只能有一台发动机,同时,相比于将motor对象作为私有成员,没有任何好处可言。汽车在不断发展,例如,混合动力车除电力发动机外,还有一台汽油发动机。在这种情况下,让car类继承motor类将称为兼容性瓶颈。 注意:将motor对象作为car类的私有成员被称为组合或聚合,这样的car类类似于下面这样: Class Car{ Private : Motor heart; Public : void Move(){ heart.switchIgItion(); heart.pumpfuel(); } } 这是一种不错的设计,让你能够轻松地在car类中添加Motor成员,而无须改变继承层次机构,也不用修改客户看到的设计。 多继承 本章前面说过,在有些情况下,采用多继承是合法的,如对鸭嘴兽来说就很合适,这是因为鸭嘴兽具备哺乳动物、鸟类和爬行动物的特征。 为应对这样的情形,C++允许继承多个基类: 因此,表示C++代码如下: Class Platypus:public Mammal,public Reptile,public Bird{ }; 使用多继承模拟具备哺乳动物、鸟类和爬行动物特征的鸭嘴兽 #include iostream using namespace std; class Mammal { public: void FeedBabyMilk() { cout Mammal: Baby says glug! endl; } }; class Reptile { public: void SpitVenom() { cout Reptile: Shoo enemy! Spits venom! endl; } }; class Bird { public: void LayEggs() { cout Bird: Laid my eggs, am lighter now! endl; } }; class Platypus: public Mammal, public Bird, public Reptile { public: void Swim() { cout Platypus: Voila, I can swim! endl; } }; int main() { Platypus realFreak; realFreak.LayEggs(); realFreak.FeedBabyMilk(); realFreak.SpitVenom(); realFreak.Swim(); return 0; } 注意: 要建立is_a关系,务必创建公有继承层次结构。 要建立has_a关系,务必创建私有或保护继承层次结构。 务必牢记,公有继承意味着继承派生类的类能够访问基类的公有和保护成员。 务必牢记,私有继承意味着继承派生类的类也不能访问基类的成员。 务必牢记,保护继承意味着继承派生类的类能够访问基类的公有和保护方法。 务必牢记,无论继承关系是什么,派生类都不能访问基类的私有成员。 不要仅为重用微不足道的方法而创建继承层次结构。 不要不分青红皂白地使用私有或公有继承,因为这可能给应用程序的可扩展性带来架构瓶颈。 在派生类中,不要编写与基类方法同名但参数不同的方法,以免隐藏基类方法。 * C++程序设计 第10章 实现继承 学习目标 编程意义的继承; C++继承的语法; 公有继承、私有继承和保护继承; 多继承; 隐藏基类方法和切除(slicing)导致的问题。 继承基础 在TOM smith从祖先哪里继承的东西中,最重要的是姓,因此他姓Smith。另外,他还从父母哪里继承了某些价值观以及木雕手艺,因为smith家族数代人都从事木雕行业。这些属性一起标识了Tom作为Smith家族后代的身份。 在编程领域,你经常会遇到具有类似属性,但细节或行为存在差异的组件。在这些情形下一种解决之道是将每个组件声明为一个类,并在每个类中实现所有的属性,这将重复实现相同的属性。另一个解决方案就是使用继承,从一个基类派生出类似的类,在基类中实现所有通用的功能,并在派生类中覆盖基本功能,以实现让每个类都独一无二的行为。第二种方法通常更佳。面向对象编程支持继承,如下图: Class Base 超类 Class Derived1 继承自base,因此也称为b

文档评论(0)

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

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

1亿VIP精品文档

相关文档