派生类构造函数和析构函数详解

简介: 派生类构造函数和析构函数详解

目录

派生类构造函数和析构函数的调用顺序

构造函数和析构函数调用顺序的例子

上面例子小结


从之前的内容我们了解了什么是C++的继承,为什么要学习继承,那么接下来我们就要了解一个全新的版块,通过下面这篇文章我们就会知道派生类构造函数和析构函数的调用顺序,以及一些知识基本的知识点

派生类构造函数和析构函数的调用顺序

在类中构造函数的主要作用就是对数据进行初始化,但是如果在派生类之中,如果对派生类中的新增加的成员如何进行初始化,就需要加入派生类中的构造函数,但是重要的一点是,基类的构造函数和析构函数是不能被它的派生类所继承的,所以说必须在派生类的构造函数中,也要对激烈的构造函数所需要的参数也同样进行设置,同时函数结束之后,照用的析构函数,对象进行收尾工作时,也需要加入新的析构函数来完成,这些所有问题都是我们接下来要讨论的,先由一个例子来讲述它们之间的关系

构造函数和析构函数调用顺序的例子

在一般情况下,当我们创建的派生类对象是首先就会调用基类的构造函数,其次我们就会调用派生类的构造函数,当我们删除或者说撤销类的对象时,就会首先调用派生类的析构函数,然后再次调用基类中的析构函数,这种顺序是相反的,下面我们就来举一个实际的例子来体现上面这两种情况

#include<iostream>
using namespace std;
class B {
public:
  B(){    //创建一个基本的构造函数
    cout << "B中的构造函数执行中……" << endl;
  }
  ~B() {
    cout << "B中的析构函数执行中……" << endl;
  }
};
class A :public B {
public:
  A() {
    cout << "A中的构造函数执行中……" << endl;
  }
  ~A() {
    cout << "A中的析构函数执行中……" << endl;
  }
};
int main() {
  A obj;
  return 0;
}

输出结果:

B中的构造函数执行中……

A中的构造函数执行中……

A中的析构函数执行中……

B中的析构函数执行中……

由上面的例子我们知道,函数是先执行了B中的构造函数在执行了A中的构造函数,在对象销毁是执行析构函数的顺序却是完全相反的,那么到底是什么导致了这种原因呢?

上面例子小结

从上面的程序运行结果我们可以不难看出,当构造函数被调用时,会严格的按照先调用该基类中的构造函数,然后会调用派生类中的构造函数这个顺序来进行执行,其次析构函数的调用顺序,也就是对象生命周期结束时所调用的函数,而它的调用顺序与构造函数的调用顺序是完全相反的,它会先调用派生类中的析构函数,后来才会调用基类中的析构函数

相关文章
|
2月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
32 2
|
3月前
|
C++ Linux
|
2月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
33 0
|
3月前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
21 2
|
3月前
|
编译器 C++
C++程序中的派生类构造函数
C++程序中的派生类构造函数
33 1
|
3月前
|
编译器 C++
【c++】构造函数和析构函数
【c++】构造函数和析构函数
【c++】构造函数和析构函数
|
3月前
|
编译器 C语言 C++
C++构造函数,析构函数
C++构造函数,析构函数
|
3月前
|
存储 编译器 Linux
构造函数与析构函数的问题总结
构造函数与析构函数的问题总结
57 0
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
123 0