(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>