内容正文:
第4章类的继承与派生
继承的基本概念。同名冲突
单一继承虚基类
多重继承恢复访问权限
派生类的构造函数
与析构函数
学习目标
LEARNING OBJECTIVES
理解继承的概念
理解赋值兼容规则和同名冲
突问题
掌握派生类成员的访问权
限
掌握虚基类
初心至善匠心育人
泛
目录
CATALOUGU
E
01
继承的基本概,念
04
派生类的构造函数与
析构函数
07
恢复访问权限
02
单一继承
05
同名冲突
03
多重继承
06
虚基类
初心至善匠心育人
4.1继承的基本概念
在现实生活中,继承是指下一代人继承上一代人遗留的财产,即实现财产重用。
在面向对象程序设计中,继承实现代码重用,即在已有类的基础上定义新的类
新的类能继承已有类的属性与行为,并扩展新的功能,而不需要把已有类的内容
再写一遍。已有的类被称为父类或基类,新的类被称为子类或派生类。例如交通
工具与火车就属于继承关系,火车拥有交通工具的一切特性,但同时又拥有自己
独有的特性,如图所示。
交通工具
火车
汽车
飞机
卡车
轿车
公交车
·在图中,箭头的方向表示继承的方向,从派生类指向基类。基类与派生类的
关系是抽象与具体化的关系。基类是派生类的抽象,而派生类是对基类的具
体化。在类的多层次结构中,最上层最抽象,最下层最具体。例如,上图中
汽车类是交通工具类的一个派生类,轿车类又是汽车类的一个派生类。
初心至善匠心育人
4.1继承的基本概念
继承可分为单一继承和多重继承两种。单一继承是指生成的派生类只有一个基类,
而多重继承是指生成的派生类有两个或两个以上的基类,如图所示。
职员
经理
销告受
经理
销带英
新售经球
多三证莱
·在图中,经理与销售员都继承自职员,因此这种继承关系属于单一继承,销
售经理继承自经理与销售员,因此这种继承关系属于多重继承。
单一继承由于只有一个基类,继承关系比较简单,操作比较容易,因此使用
相对较多;多重继承由于基类较多,继承关系比较复杂,操作比较烦琐,因
此使用相对较少。
·继承是类与类之间的一种关系,它描述了派生类与基类之间的“isa”关系
即派生类是基类的一种,是基类的具体化。例如,通常人们常说的“白马是
马”就表达了这种继承关系的含义。
初心至善匠心育人
4.1继承的基本概念
类与类之间还有一种关系是组合关系,它指一个类中有另一个类的对象。组合关
系描述两者之间的“hasa”关系,如汽车类包含轮胎对象,但不能说轮胎类是汽
车类的一种。
·综上所述,可以得出继承关系的特点:
·一个派生类可以有一个或多个基类,只有一个基类时,称为单继承,有多个基类
时,称为多继承。
·继承关系可以是多级的,即可以有类A继承类B和类C继承类A同时存在。
·不允许继承循环,不能有类A继承类B、类C继承类A和类B继承类C同时存在。
初心至善匠心育人
4.2
单一继承
4.2.1
派生类的定义格式
4.2.2
派生类成员的访问权限
4.2.3
赋值兼容规侧
初心至善匠心育人
4.2单一继承
4.2.1派生类的定义格试
在C++中,单一继承中派生类定义的语法格式如下:
0了aas部生考我1整承力式不类名
生豹中漆加成圆
·派生类的定义方法与普通类基本相同,只需要在派生类名后添加冒号“:”和访问
控制权限符及基类名。这里的“继承方式”用于规定基类的成员在派生类中的访
问权限,常用的是public,默认的是private。继承是允许重用现有类来构造新类
的特性,如图所示。
益类
把
澄生典
数解发用
基典数据做员
成负玉数
还典成生玉数
新道觉器发负
桥考成员忍数
初心至善匠心育人
4.2单一继承
4.2.1派生类的定义格式
·虽然派生类可以继承基类的成员,但是基类中的构造函数与析构函数是不能继承
的,因为它们是每个类所特有的。此外,友元函数也不能被继承,因为它不是这
个类的成员函数。但前面提到的静态成员是允许被继承的,当静态成员被继承时,
基类与派生类共享这个静态成员。
4.2单一继承
4.2.2派生类成员的问权限
·继承方式分为公有继承(public)方式、私有继承(private)方式和保护继承
(protected)方式3种。派生类的成员由从基类中继承的成员和派生类中新增的
成员两部分构成。其中,后一部分成员的访问权限比较简单,与派生类中定义的
访问权限相同,而前一部分并不是简单地把在原基类成员的访问权限照搬过来
基类成员在派生类中的访问属性取决于继承方式及这些成员本身在基类中的访问
属性,可以用以下4句话来总结。
·基类的私有成员无论以何种继承方式在派生类中均不可直接访问(inaccessible)。
·在公有继承方式下,基类的保护和公有成员在派生类中均保持原来的访问属性
·在保护继承方式下,基类的保护和公有成员在派生类中的访问属性均为保护属