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

本文深入解析了派生类的构造函数和析构函数的使用方法,包括参数传递、初始化顺序和常见错误。通过实例展示了如何正确地实现派生类的构造函数和析构函数,确保类的生命周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

之前必须搞清的知识点:
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);

}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值