欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++派生类含有成员对象构造函数析构函数顺序

发布时间:2023/11/30 c/c++ 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++派生类含有成员对象构造函数析构函数顺序 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

参考博客:传送门1

当类中含有对象成员时:

  • 类的构造函数要包含对成员对象的初始化,如果构造函数的成员初始化列表没有包含对成员对象的初始化,系统会自动调用成员对象的无参构造函数。顺序上:先调用成员对象的构造函数,当所有的成员对象都执行了自身类的构造函数以后再执行当前类的构造函数
  • 调用析构函数时先调用类的构造函数,再调用成员对象的构造函数。

当类继承于另一个类时:

  • 如果没有显式地在构造函数的成员初始化列表中调用基类的构造函数,会自动先调用基类的无参构造函数。
  • 析构的时候先调用派生类的析构函数,再调用基类的构造函数。

当类中含有成员对象,同时继承了某个类的时候,他们的构造函数析构函数的顺序是固定的(与成员初始化列表中的顺序没有关系):

构造函数:基类->成员对象->派生类
析构函数:派生类->成员对象->基类

例如:

#include<iostream> #include<cstdio> using namespace std;class A { public:A(){cout << "A" << endl;}~A(){cout << "~A" << endl;} };class C { public:C(){cout << "C" << endl;}~C(){cout << "~C" << endl;} };class B:public A {C c; public:B(){cout << "B" << endl;}~B(){cout << "~B" << endl;} };int main() {B b; }

运行结果:

总结

以上是生活随笔为你收集整理的C++派生类含有成员对象构造函数析构函数顺序的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。