派生类的构造函数和析构函数
基类的构造函数和析构函数不能被继承。
在派生类中,如果派生类新增的成员进行初始化,就必须加入新的构造函数。与此同时,对所有从基类继承下来的成员的初始化工作还是由基类的构造函数完成,必须在派生类中对基类的构造函数所需要的参数进行设置。同样,对派生类对象的扫尾,清理工作也需要加入析构函数。
首先看下面例子:
class A //默认构造函数为空
{
public:
int x;
};
class B:public A //默认构造函数为空
{
public:
int y;
};
当创建B类对象b1后,对象b1可以访问下x,y这两个成员。那么是否可以认为b1实际上是下面C类的对象呢?
class C
{
public:
int x,y;
};
若利用C类创建对象c1,从成员访问权限上看,对象b1和c1没有差别。但是b1的x和c1的x不同,它继承于基类。由于派生类不能继承父类的构造函数和析构函数,因此对象b1的x占据的内存区域只能通过基类的构造函数初始化。同样,销毁对象时,b1的x占据的内存也只能由基类的析构函数进行清理。而对象c1的x是由C类构造函数初始化,由C类析构函数进行清理工作的。因此b1和c1仅仅是表面相似而已。由于派生类构造过程涉及基类构造函数的调用,因此其构造函数比较复杂。
1、构造函数
派生类构造函数的一般形式为
派生类::派生类(参数总表)::基类1(参数表1),……&#x