C课件 第9章 继承

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

---------------------------------------------------------------最新资料推荐------------------------------------------------------

C课件第9章继承

第九章面向对象 1--继承这一章的内容包括:

基类和派生类派生类的构造函数/析构函数子类型化和类型适应多继承虚基类一、基类和派生类1.概念通过继承机制,可以利用已有的数据类型来定义新的数据类型。

所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。

我们称已存在的用来派生新类的类为基类,又称为父类。

由已存在的类派生出的新类称为派生类,又称为子类。

在 C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。

从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。

2.语法单继承的定义格式如下:

class 派生类名: 继承方式基类名 { //派生类新定义成员 }; 其中,派生类名是新定义的一个类的名字,它是从基类名中派生的,并且按指定的继承方式派生的。

继承方式常使用如下三种关键字给予表示:

public 表示公有基类;private 表示私有基类;protected 表示保护基类;示例:

1/ 13

class MyDate: public Date1 { //派生类新定义成员变量或函数 }; //派生类新定义成员变量(或函数)初始化(或实现) 3 派生类的三种继承方式公有继承(public)、私有继承(private)、保护继承(protected)是三种继承方式。

(1) 公有继承(public) 公有继承的特点是基类的 private、public 和protected 成员作为派生类的成员时,它们都保持原有的状态。

(2) 私有继承(private) 私有继承的特点是基类的 public 成员和 protected成员,在派生类都变为私有成员。

基类的原私有成员仍为派生类的私有成员(3) 保护继承(protected) 保护继承的特点是基类的public 成员和protected成员,在派生类都变为保护成员。

基类的原私有成员仍为派生类的私有成员。

下表列出三种不同的继承方式的基类特性和派生类特性:

继承方式基类成员派生类成员公有继承public protected private public protected private 私有继承 public protected private 变为 private 变为 private private 保护继承public protected private 变为 protected protected private 对于单级继承来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。

私有继承在一些特定场合下可用于表示类的组成关系。

保护继承与私有继承在实际编程中是极其少见的。

---------------------------------------------------------------最新资料推荐------------------------------------------------------ Q1:

C++默认的继承方式?对于 C++的类(class),默认的继承方式是私有继承(private),而最常用的继承方式是公有继承(public)。

对于C++的结构体(struct) 默认的继承方式是公有继承(public)。

4.基类与派生类的关系任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。

基类与派生类之间的关系可以有如下几种描述,了解这些关系有助于指导实际编程工作:

( 1)派生类是基类的具体化类的层次通常反映了客观世界中某种真实的模型。

在这种情况下,不难看出:

基类是对若干个派生类的抽象,而派生类是基类的具体化。

基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型。

( 2)派生类是基类定义的延续先定义一个抽象基类,该基类中有些操作并未实现。

然后定义非抽象的派生类,实现抽象基类中定义的操作。

例如,虚函数就属此类情况。

3/ 13

这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。

这也是派生类的一种常用方法。

( 3)派生类是基类的组合在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。

比如以前讲过的飞机组成的例子,用组成关系和多继承都可以,但最好使用组成关系。

派生类将其本身与基类区别开来的方法是添加数据成员和成员函数。

因此,继承的机制将使得在创建新类时,只需说明新类与已有类的区别,从而大量原有的程序代码都可以复用,所以有人称类是可复用的软件构件。

在实际编程中,一定要注意,继承是软件体系结构方面的问题:

( 1)派生类最好是基类的一类(is a kind of),否则容易出现设计概念错误。

(2)继承会增加空间复杂度和时间复杂度,要慎重使用。

继承链不要太长(3-5 层足矣),要头轻脚重,越是顶层的类越要轻巧----最好是完全抽象的虚类。

(3)优先使用组成关系(有的书叫聚集、聚合、复合),而不是继承关系解决问题。

继承把抽象化角色(基类)和实现化角色(派生类)的关系绑

---------------------------------------------------------------最新资料推荐------------------------------------------------------ 定,使得两个层次之间产生了相互依赖和限制,很难独立地演化,在软件设计中应避免此类问题。

组成关系没有这个缺点。

(4)基类要坚固不变,否则派生类。

如果基类的变化是必需的,那应该在派生类和基类之间加一个设计概念上更抽象的第三者类,用这个第三者的类去破坏原有的继承关系。

想想为什么数据库访问要通过 JDBC 等接口。

Q2:

实际编程中使用继承应注意哪些问题?要求对课件讲到的做 1 -2 点补充。

Q3:

你对优先使用组成关系,而不是继承关系是怎样理解的?要有自已的观点。

二.派生类的构造函数/析构函数当一个派生类被实例化时,其基类也被实例化,实际上一个派生类对象是由其基类对象和派生类对象组装而成,了解这一点才能了解派生类构造函数/析构函数的有关特性。

1. 派生类的构造函数构造函数不能够被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化派生类对象。

所以,在定义派生类的构造函数时除了对自己的数据成员进行

5/ 13

相关文档
最新文档