【发布时间】:2016-05-15 06:52:11
【问题描述】:
c++虚拟继承中构造函数调用的顺序是什么?
对于以下两种多重继承情况;
(I)为以下代码,没有虚继承;
class a
{
public:
a()
{
cout<<"\t a";
}
};
class b: public a
{
public:
b()
{
cout<<"\t b";
}
};
class c: public b
{
public:
c()
{
cout<<"\t c";
}
};
class d: public c
{
public:
d()
{
cout<<"\t d";
}
};
class e: public c, public d
{
public:
e()
{
cout<<"\t e";
}
};
class f: public b, public e
{
public:
f()
{
cout<<"\t f";
}
};
int main()
{
f aaa;
return 0;
}
输出是:
a b a b c a b c d e f
(II)具有类e的虚继承:
class a
{
public:
a()
{
cout<<"\t a";
}
};
class b: public a
{
public:
b()
{
cout<<"\t b";
}
};
class c: public b
{
public:
c()
{
cout<<"\t c";
}
};
class d: public c
{
public:
d()
{
cout<<"\t d";
}
};
class e: public c, public d
{
public:
e()
{
cout<<"\t e";
}
};
class f: public b, public virtual e
{
public:
f()
{
cout<<"\t f";
}
};
int main()
{
f aaa;
return 0;
}
输出是:
a b c a b c d e a b f
有人能解释一下在这两种情况下是如何获得输出的吗? 虚拟继承如何影响对象的构造?
【问题讨论】:
标签: c++ inheritance virtual