Cpp 对象模型探索 / 带有虚继承类的构造函数的调用顺序
栗子
#include
class A
{
public:A() { std::cout << "A" << std::endl; }
};
class B : public A
{
public:B() { std::cout << "B" << std::endl; }
};
class C : public A
{
public:C() { std::cout << "C" << std::endl; }
};
class D : public B, public C
{
public:D() { std::cout << "D" << std::endl; }
};
int main()
{D dobj;return 0;
}
一、
class B : public A{}
class C : public A{}
结果
class B : virtual public A{}
class C : virtual public A{}
结果
class B : virtual public A{}
class C : public A{}
结果
class B : public A{}
class C : virtual public A{}
结果
class B : public A{}
class C : virtual public A{}
执行 B 类的构造函数时,由于 B 是普通继承 A 的,所以会执行 A 的构造函数再执行 B 的构造函数。
执行 C 类的构造函数时,由于 C 是虚继承 A 的,所以会跳过 A 的构造函数,直接执行 B 的构造函数。
3、对于 B 和 C 都是虚继承 A 的情况,D 构造函数之前就调用 A 的构造函数,然后在执行 B 和 C 的构造函数之前,全部跳过各自的 A 的构造函数的代码,直接执行 B 和 C 的构造函数。
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
