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

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

目录

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

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

上面例子小结


从之前的内容我们了解了什么是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中的构造函数,在对象销毁是执行析构函数的顺序却是完全相反的,那么到底是什么导致了这种原因呢?

上面例子小结

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

相关文章
|
安全 C++
c++11新特性——智能指针详解
c++11新特性——智能指针详解
|
存储 程序员 编译器
|
设计模式 数据库 C#
外观模式(Facade Pattern)
外观模式(Facade Pattern)是一种结构型设计模式,为子系统中的一组接口提供一个一致的接口。它通过一个高层接口简化子系统的复杂性,使客户端更容易使用。外观模式的核心角色包括外观(Facade)和子系统(Subsystems),主要优点是降低复杂性和松耦合,适用于简化接口、分层设计和遗留代码集成等场景。
|
SQL 存储 关系型数据库
数据库的创建和增删查改使用操作(超详细)
本文主要带新手小白理解上手mysql的增删查改等操作
|
存储 监控 安全
API网关是如何提升API接口安全管控能力的
API安全性越来越重要,对API安全进行防护既有利于用户安全的使用API所提供的服务,又能够为用户的隐私数据进行保驾护航。所以,提高API安全防护能力的问题亟待解决。面对以上形势,现在越来越多的企业采用API网关来管理内部API。以下从API资产管理、API安全防护、API风险溯源三个方面介绍API网关如何对API进行全生命周期的安全管理。
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
280 6
【数据结构】map&set详解
|
Ubuntu Linux 数据库
在Linux中,如何进行软件包升级?
在Linux中,如何进行软件包升级?
|
存储 监控 负载均衡
MongoDB的水平扩展能力
MongoDB的水平扩展能力
307 3