您的位置:首页 > 编程语言 > C语言/C++

C++类和对象知识点整理五----派生类的构造函数和析构函数

2017-09-10 20:39 381 查看
22、C++派生类中的构造函数

a.基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。

构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。

b.在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成,但是大部分基类都有private属性的成员变量,他们在派生类中无法访问,更不能用派生类的构造函数来初始化

这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数

c.构造函数的调用顺序

基类构造函数总是被优先调用,这说明创建派生类对象时,会先调用基类的构造函数,在调用派生类的构造函数,如果继承关系有好几层的话,以此类推。

注意:派生类构造函数只能调用直接基类的构造函数,不能调用间接基类的。

因为这样做的话最原始的基类构造函数会被调用多次,相应的,初始化工作也会做多次,这不仅是多余 的,还会浪费CPU时间以及内存,毫无益处。

事实上,通过派生类创建对象时必须要调用基类的构造函数,这是语法规定,换句话说,定义派生类构造函数时最好知名基类构造函数,如果不指明,就调用基类的默认构造函数(不带参数的构造函数)如果没有默认构造函数,那么编译失败

23、C++派生类的析构函数

和构造函数类似,析构函数也不能被继承,与构造函数不同的是,再派生类的析构函数中不用显示调用基类的析构函数,因为每个类职业一个析构函数,编译器知道如何选择,无需程序员干涉



b.析构函数的执行顺序与构造函数的执行顺序刚好相反

创建派生类对象时,构造函数的执行顺序与继承顺序相同,即先执行基类构造函数,在执行派生类构造函数

而销毁派生类对象时,析构函数的执行顺序和继承顺序相反。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息