初始化列表和初始化相关问题—面向对象(三)

初始化列表的构造顺序

初始化列表的初始化顺序与变量声明的顺序一致,而不是按照出现在初始化列表中的顺序来进行的!

看如下的代码:

#include <stdio.h>
#include <iostream>

using namespace std;

class obj {
public:
	obj(int k) :j(k), i(j)
	{}
	void print(void)
	{
		cout << i << endl << j << endl;
	}
private:
	int i; //真实的初始化顺序
	int j;
};

int main()
{	
	obj s(2);
	s.print();

	system("pause");
	return 0;
}

按常理说,一般的思路是看见构造函数中先初始化j,再用j去初始化i,那应该输出两个2,但实际上是:

这说明,真是的初始化顺序,是类中的定义顺序来的,不是声明顺序。 

初始化列表和赋值的区别

首先先看看什么是初始化列表和赋值,

int a = 5;//赋值操作
int a(5); //初始化成员操作

这就是最简单的赋值操作,大部分情况下,结果都是相同的。

只能使用初始化而不能使用赋值操作的场景

  • 在定义const和引用类型成员变量的时候,只能进行初始化操作而不能进行赋值操作。
  • 类的构造函数需要调用其基类的构造函数的时候,也是只能用初始化的方法,不能用赋值操作。

 

 

 

 

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/qq_17846375/article/details/104992250