C++ 继承关系中构造函数的调用顺序

如果A为基类,B继承自A,C继承自B和A,那么在实例化C时,它们各自的构造函数的调用顺序是什么?

一般性规则:

  1. 在调用构造函数前先调用父类的构造函数;
  2. 如果是多重继承,调用父类构造函数的顺序是自左向右;
  3. 此子而父递归以上两条。

如下代码:


/** * 继承关系中,构造函数的调用顺序及调用次数 * * A * /| * B | * \| * C */ #include <stdio.h> class A { public: A() { puts(&quot;A&quot;); } virtual ~A(){} }; class B : public A { public: B() { puts(&quot;B&quot;); } virtual ~B(){} }; class C : public B, public A { public: C() { puts(&quot;C&quot;); } virtual ~C(){} }; int main() { C c; return 0; }

结果如下:


A B A C
Creative Commons License Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license .