现在的位置: 首页 > 综合 > 正文

多继承、虚继承构造函数执行顺序

2012年10月23日 ⁄ 综合 ⁄ 共 1405字 ⁄ 字号 评论关闭

#include <iostream>
using namespace std;
class A
{
public:
 A()
 {
  cout<<"Constructor called:A"<<endl;
 }
};
class B:public A
{
public:
 B()
 {
  cout<<"Constructor called:B"<<endl;
 }
};
class C:public A
{
public:
 C()
 {
  cout<<"Constructor called:C"<<endl;
 }
};
class D:public B,public C
{
public:
 D()
 {
  cout<<"Constructor called:D"<<endl;
 }
};
int  main()
{
 D objd; 
 return 0;

#include <iostream>
using namespace std;
class A
{
public:
 A()
 {
  cout<<"Constructor called:A"<<endl;
 }
};
class B:virtual public A
{
public:
 B()
 {
  cout<<"Constructor called:B"<<endl;
 }
};
class C:public A
{
public:
 C()
 {
  cout<<"Constructor called:C"<<endl;
 }
};
class D:public B,public C
{
public:
 D()
 {
  cout<<"Constructor called:D"<<endl;
 }
};
int  main()
{
 D objd; 
 return 0;

结果:A B A C D

#include <iostream>
using namespace std;
class A
{
public:
 A()
 {
  cout<<"Constructor called:A"<<endl;
 }
};
class B:virtual public A
{
public:
 B()
 {
  cout<<"Constructor called:B"<<endl;
 }
};
class C:virtual public A
{
public:
 C()
 {
  cout<<"Constructor called:C"<<endl;
 }
};
class D:public B,public C
{
public:
 D()
 {
  cout<<"Constructor called:D"<<endl;
 }
};
int  main()
{
 D objd; 
 return 0;

结果:A B C D

 #include <iostream>
using namespace std;
class A
{
public:
 A()
 {
  cout<<"Constructor called:A"<<endl;
 }
};
class B:public A
{
public:
 B()
 {
  cout<<"Constructor called:B"<<endl;
 }
};
class C:virtual public A
{
public:
 C()
 {
  cout<<"Constructor called:C"<<endl;
 }
};
class D:public B,public C
{
public:
 D()
 {
  cout<<"Constructor called:D"<<endl;
 }
};
int  main()
{
 D objd; 
 return 0;

 

结果:AABCD

抱歉!评论已关闭.