您的位置:首页 > 其它

关于派生类的构造函数和析构函数

2013-01-04 16:47 239 查看

关于派生类的构造函数和析构函数

之前必须搞清的知识点:

1.基类的构造函数不能被继承如果对派生类新增成员进行初始化,就必须为派生类添加新的构造函数。

2.只需对派生类的新增成员初始化,基类成员的初始化,只需调用相应的基类构造函数。

3.派生类的构造函数需要给基类的构造函数传递参数(达到基类初始化的作用)

一.派生类的构造函数 和析构函数

     一般意形式:

           派生类名::派生类名(参数总表):基类名1(参数1),…,基类名n(参数n),

           内嵌对象名1(内嵌对象参数表1),…,   内嵌对象名m(内嵌对象参数表m)

           {

               派生类新增成员的初始化语句;

           }

1.派生类名与类名相同

2.构造函数的参数表中,需要给出初始化基类的数据、新增内嵌对象数据及新增一般成员数据所需要的全部参数

3.在参数总表后面,列出需要使用的参数进行初始化的基类名和内嵌成员名及各自得参数表,各项之间用逗号分开

4.这里的基类名、对象名之间的顺序无关紧要,它们各自出现的顺序可以是任意的。

5.在生成累的类的对象时,系统首先会使用这里列出的参数,调用基类和内嵌对象成员的构造函数。

6.当一个类同时有几个基类时,对于所有需要给予参数进行初始化的基类,都要显式给出基类名和参数表,对于默认使用构造函数的基类,可不给予类名。同样,对于对象下成员,如果是使用默认的构造函数,也不需要对象名和参数表。对于单继承这种特殊的情况,就只需要写一个基类名称。

7.“什么时候需要声明派生类的构造函数??”——如果基类声明了带有形参表的构造函数时,派生类就应什么构造函数。

提供一个将参数传递给基类的构造函数的途径,以保证在基类进行初始化时能够获得必要的数据。

8.析构函数:其作用是完成对象消亡前的一些清理工作,调用顺与构造函数恰好相反。
9.派生类构造函数执行的顺序

A.调用基类构造函数,调用顺序安照被继承是声明的顺序(从左到右)

B.调用内嵌成员对象的构造函数,调用顺序按照他们在类中的顺序

C.派生类的构造函数体中的内容

#include <iostream>

using namespace std;

class B1 //基类B1,构造函数有参数

{

public:

B1(int i) {cout<<"constructing B1 "<<i<<endl;}

~B1(){cout<<"dstructing B1 "<<endl;}

};

class B2 //基类B2,构造函数有参数

{

public:

B2(int j) {cout<<"constructing B2 "<<j<<endl;}

~B2(){cout<<"dstructing B2 "<<endl;}

};

class B3 //基类B3,构造函数无参数

{

public:

B3(){cout<<"constructing B3 *"<<endl;}

~B3(){cout<<"dstructing B3 "<<endl;}

};

class C: public B2, public B1, public B3 //派生新类C

//注意基类名的顺序

{

public: //派生类的公有成员

C(int a, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b)

{cout<<"constructing C "<<endl;}

~C()

{cout<<"dstructing C "<<endl;}

//注意基类名的个数与顺序

//注意成员对象名的个数与顺序

private: //派生类的私有对象成员0

B1 memberB1;

B2 memberB2;

B3 memberB3;

};

int main()

{

C obj(1,2,3,4);

}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: