虽然已经考完了,但既然开了篇,就要写完。
第二章:继承与派生
1.基本概念
- 继承,指建立一个新的类,新类从一个或多个已定义的几类中继承属性(数据成员)和行为(函数成员),并可以重新定义或添加新的属性和行为,从而建立类的层次结构。继承是实现软件重用的一种方法。
- 继承可以分为单一继承和多重继承。单一继承是一个派生类只从一个基类派生,多重继承是一个派生类从多个基类派生。
- 继承方式有private,protected和public三种,不同的继承方式下,派生类继承的父类成员的访问权限不同。默认继承方式是private。
- 派生类中重写的函数会屏蔽基类中的同名函数。
class A { //类内容 }; class B{ //类内容 } class C:public A, private B { //继承A、B中的数据成员和函数并加上自己的内容 }
2.类的继承方式
- 公有继承(public)
关于基类中成员的访问权限 基类 派生类 外部 public public不变 可访问 protected protected不变 不可访问 private 不可访问 不可访问
- 私有继承(private)
关于基类中成员的访问权限 基类 派生类 外部 public private 不可访问 protected private 不可访问 private 不可访问 不可访问
- 保护继承(protected)
关于基类中成员的访问权限 基类 派生类 外部 public protected 不可访问 protected protected 不可访问 private 不可访问 不可访问
3.派生类的构造函数和析构函数
- 派生类的构造函数初始化派生类新增的数据。继承的成员自动调用基类的构造喊函数。
- 系统会为派生类定义一个默认构造函数(无参数、无显式初始化表、无数据成员初始化代码),用于完成派生类对象创建时的内存分配操作。
- 派生类需要初始化的数据有继承的成员、新增类对象的成员和新增普通成员。
- 派生类构造函数的调用顺序为:基类构造函数、子对象的构造函数、派生类的构造函数。
- B是A的public派生类,C是B的public派生类,如果希望B可可以直接访问A的private成员,而C不能访问A的private成员,可以将B声明为A的友元类。(也可以将基类的私有成员定义为protected,然后用private继承)
4.多重继承
- 派生类构造函数的执行顺序是先执行所有基类的构造函数,再执行派生类本身的构造函数。
- 同一层次的各基类构造函数的执行顺序取决于声明派生类是所指定的基类顺序。
- 调用不同基类中相同成员和派生类中访问公共基类成员时会产生二义性,可以通过域作用域符和虚基类解决。