C++继承和派生
图:古老的地球
Guderian出品
本文整理自《北京大学公开课:C++面向对象程序设计》基本概念
- 继承和派生实际上是一回事:在定义一个新的类
B
时,如果该类与某个已有的类A
相似(指的是B
拥有A
的全部特点),那么可以把A
作为一个基类,而把B
作为基类的一个派生类(也称子类),这使得创建和维护一个程序更加容易 - 派生类拥有基类的全部特点,派生类还可以对基类进行修改和扩充。在派生类中,可以扩充新的成员变量和成员函数
- 派生类一经定义,可以独立使用,定义对象时不依赖于基类
- 派生类拥有基类的全部成员函数和成员变量。不论是
private
、protected
、public
- 在派生类的各个成员函数中,不能访问基类的
private
成员
简单理解成员修饰符
protected
和private
的区别:protected
成员在派生类中可以被访问,而private
不能
- 对象不同类型对应的访问权限:
类型 | public | protected | private |
---|---|---|---|
本类 | √ | √ | √ |
派生类 | √ | √ | × |
其他类 | √ | × | × |
派生类的写法
1 | class 派生类名: 访问修饰符 基类名 //Zh |
访问修饰符可以是private
、protected
、public
中的一个。如果未使用访问修饰符,则默认为private
。该访问修饰符规定了继承类型。
继承类型
- 公有继承(
public
):继承public
和protected
且类型不变,不继承private
- 保护继承(
protected
):继承public
和protected
且类型都为protected
,不继承private
- 私有继承(
private
):继承public
和protected
且类型都变为private
,不继承private
一般使用公有继承。
写法示例:学生管理系统
1 | class CStudent |
派生类对象的内存空间
派生类对象的体积 = 基类对象的体积 + 派生类对象自己的成员变量的体积。在派生类对象中,包含基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。
学籍管理程序实现
1 |
|
派生类的使用方法
- 在派生类中,调用基类的成员函数,设置了从基类继承的信息之后,之后再设置自己独有的信息。这一方法在
C++
面向对象编程中是很常用的。 - 多继承:一个子类可以有多个父亲,继承多个父亲的特性
参考并整理自《C++面向对象设计》郭炜,北京大学,感谢原作者!编辑时有删改