c++ 初始化顺序

Posted 略加思索的河马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 初始化顺序相关的知识,希望对你有一定的参考价值。

class Base
{
public:
	Base(int i) { cout << i; }
	~Base() { }
};
class Base1: virtual public Base
{
public:
	Base1(int i, int j=0) : Base(j) { cout << i; }
	~Base1(){}
};
class Base2: virtual public Base
{
public:
	Base2(int i, int j=0) : Base(j) { cout << i; }
	~Base2(){}
};
class Derived : public Base2, public Base1
{
public:
	Derived(int a, int b, int c, int d) : mem1(1), mem2(2), Base1(3),
		Base2(4),Base(1)
	{ cout << b; }
private:
	Base2 mem2;
	Base1 mem1;
};

int main(int argc, char **argv)
{
	 Derived objD (1, 2, 3, 4); 


	getchar();
	return 0;
}

  

  • 首先,任何虚拟基类的构造函数按照它们被继承的顺序构造;
  • 其次,任何非虚拟基类的构造函数按照它们被继承的顺序构造;
  • 最后,任何成员对象的构造函数按照它们声明的顺序调用;

以上是关于c++ 初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章

导航上的片段生命周期重叠

用于初始化数组的 c++ 语法

为啥此代码片段返回意外结果?

这些 C++ 代码片段有啥作用?

C++ 静态初始化顺序

有趣的 C++ 代码片段,有啥解释吗? [复制]