C++ 虚基类构造函数的执行顺序

2014-03-10 12:52:59 · 作者: · 浏览: 89

  (1)调用基类的构造函数,多个基类则按派生类声明时

  列出的次序、从左到右调用,而不是初始化列表中

  的次序。

  (2)调用对象成员(子对象)的构造函数,按类声明中

  对象成员出现的次序调用,而不是初始化列表中的

  次序。

  (3)执行派生类的构造函数。

  同一层中对虚基类构造函数的调用总是先于普通基类的构

  造函数。

  #include<IOSTREAM>

  using namespace std;

  class A//基类A

  {

  public:

  A(){cout《"class A"《ENDL;} pre }< 0;

  return d;

  D { main() int };

  D 《endl;} D(){cout《?class public:

  由C1和C2派生出类D C2 public C1, D:public C2 《endl;}

  C2(){cout《?class 由类B虚拟派生出类C2 B C2:virtual C1 《endl;}

  C1(){cout《?class 由类B虚拟派生出类C1 C1:virtual B 《endl;}

  B(){cout《?class 由A类派生出类B A B:>

  <P><BR>

  </P>

  <P></P><PRE class=brush:java;>#include<IOSTREAM>

  using namespace std;

  class M

  {

  public:

  M(const char *s){cout《"M:"《S《ENDL;} pre 0;

  return D { main() int };

  public: public B A < } main );

  g(?from G {cout《?G: 《s《endl;} G )

  G ),m(?in G ),F(?from G ),

  E(?from G ),C(?from s):B(?from char* G(const m;

  M F E, G:public {cout《?F: 《s《endl;} F )

  F ),m(?in F ),D(?from F ),C(?from F(const C, virtual B, F:virtual

  {cout《?E: 《s《endl;} E )

  E ),m(?in E ),C(?from E ),B(?from s):A(?from E(const C A, E:public D )

  {cout《?D: 《s《endl;} s):m(?in D(const C )

  {cout《?C: 《s《endl;} C(const B )

  {cout《?B: 《s《endl;} B(const A ){cout《?A: 《s《endl;}

  A(const><BR>

  <BR>

  <P></P>

  <BR>

  <P></P>                     </PRE>