21xrx.com
2024-12-22 20:31:19 Sunday
登录
文章检索 我的文章 写文章
C++继承中构造函数的调用顺序
2023-07-06 18:29:58 深夜i     --     --
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++信号槽机制

评论区

{{item['qq_nickname']}}
()
回复
回复