一,基本概念
1.类的继承,指从已有的类那里继承一些特性。原有的类称为基类或父类,继承产生的类成为子类或派生类。
2.派生类的声明
3.继承方式分为三种,公有(public),私有(private),保护(protected)。
当继承方式为公有继承时,基类的公有成员和保护成员被继承到派生类中,而基类的私有成员在派生类中无法访问。另外,基类的公有成员和保护成员被继承后仍作为派生类的私公有成员和保护成员,也就是说派生类的所有成员都可以访问这些项,但都无法访问基类的私有成员。
当继承方式为私有继承时,基类的公有成员和保护成员都以私有成员的身份出现在派生类中,基类的私有成员在派生类中依旧不可访问。与公有继承的差别在于此时继承项变成了私有成员,因此无法在类外进行访问。
同样,保护继承是,基类的公有成员和保护成员以保护成员的形式出现在派生类中。
二,派生类的构造和析构函数
派生类的基类继承而来的成员的初始化工作还是还是由基类的构造函数完成,然后派生类中新增的成员在派生类的构造函数中初始化。
派生类构造函数的语法如下
如果基类中没有不带参数的构造函数,那么在派生类的构造函数中必须调用基类构造函数。
派生类构造函数的执行次序
1)派生类构造函数先调用基类构造函数。
2)执行派生类构造函数本身。
同样,在派生类对象被释放时,先执行派生类析构函数,再执行其基类析构函数。
例子
#include
#include
using namespace std;
class B1
{
public:
B1(int i)
{
cout<<"constructing B1 "<
<
因为在C类的声明中,顺序为B2,B1,B3,因此先调用基类构造函数,顺序如前,之后调用内嵌成员对象的构造函数,调用顺序按照他们在类中的声明顺序,为B1,B2,B3。
析构函数与构造函数的顺序正好相反
#include
#include
using namespace std;
class B1
{
public:
B1(int i)
{
cout<<"constructing B1 "<
<
输出结果为:
constructing B2 2
constructing B1 1
constructing B3
constructing B1 3
constructing B2 4
constructing B3
destructing B3
destructing B2
destructing B1
destructing B3
destructing B1
destructing B2