构造函数和析构函数

基类的构造函数和析构函数不能被派生类继承。

基类的构造函数不能被派生类继承,派生类中需要声明自己的构造函数。在设计派生类的构造函数时,不仅需要考虑派生类增加的数据成员的初始化也要考虑基类的数据成员的初始化。声明构造函数时,只需要对本类中新增成员进行初始化,对继承而来的基类成员的初始化,需要调用基类的构造函数完成。


基类的析构函数不能被派生类继承,派生类需要自行声明自己的析构函数。声明方法与一般的析构函数不同,不需要调用基类的析构函数,系统会自动隐式调用。析构函数的调用次序和构造函数相反。


类的成员变量的初始化顺序只与变量在类中的声明顺序有关,与在构造函数中的初始化列表的顺序无关。

成员变量的初始化次序跟变量在内存中的次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定啦。


从全局看,变量的初始化顺序如下:
1)基类的静态变量或全局变量。

2)派生类的静态变量或全局变量。

3)基类的成员变量。

4)派生类的成员变量。


构造函数没有返回值,如何得知对象是否构造成功

因为构造函数没有返回值,所以通知对象的构造失败的唯一方法就是在构造函数中抛出异常。构造函数中抛出异常将导致对象的析构函数不被执行,当对象发生部分构造时,已经构造完毕的子对象将会逆序地被析构。


构造函数与析构函数的区别

构造函数有以下特点:
1.构造函数的名字必须与类名相同
2.构造函数可以有任意类型的参数,但不能具有返回类型;
3.定义对象时,编译系统会自动地调用构造函数;
4.构造函数是特殊的成员函数,函数体可以在类体内,也可写在类体外;
5.构造函数被声明为公有函数,但它不能像其他成员函数那样被显式调用,它是在定义对象的同时被调用的。

析构函数有以下特点:
1.析构函数的名字必须与类名相同,但它前面必须加一个波浪号  ~  ;
2.析构函数没有参数,也没有返回值,而且不能被重载,因此在一个类中只能有一个析构函数
3.当撤销对象时,编译系统会自动地调用析构函数。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值