21xrx.com
2025-03-31 12:04:53 Monday
文章检索 我的文章 写文章
C++继承中构造函数的调用顺序
2023-07-06 18:29:58 深夜i     32     0
C++ 继承 构造函数 调用顺序

在C++的继承中,父类的构造函数会在子类的构造函数之前被调用,而析构函数的调用顺序则与构造函数相反,即子类的析构函数会在父类的析构函数之前被调用。

例如,假设有以下的类继承关系:

class A {
public:
  A() { cout << "A::A()" << endl; }
  ~A() { cout << "A::~A()" << endl; }
};
class B : public A {
public:
  B() { cout << "B::B()" << endl; }
  ~B() { cout << "B::~B()" << endl; }
};
class C : public B {
public:
  C() { cout << "C::C()" << endl; }
  ~C() { cout << "C::~C()" << endl; }
};

当我们创建一个C类对象时,程序会以以下顺序调用构造函数:

1. 调用A的构造函数

2. 调用B的构造函数

3. 调用C的构造函数

输出结果为:

A::A()
B::B()
C::C()

在析构对象时,程序则会以相反的顺序来调用析构函数:

1. 调用C的析构函数

2. 调用B的析构函数

3. 调用A的析构函数

输出结果为:

C::~C()
B::~B()
A::~A()

需要注意的是,在继承中,如果子类没有显式地调用父类的构造函数,则会默认调用父类的无参构造函数。如果父类没有无参构造函数,则需要在子类中显式地调用父类的有参构造函数。

继承是C++中一个非常重要的特性,理解构造函数和析构函数的调用顺序可以帮助我们更好地利用继承,编写出更好的代码。

  
  
下一篇: C++信号槽机制

评论区