C++57个入门知识点_41_初始化列表实现常成员变量和成员对象的初始化(初始化列表可以用于初始化普通成员变量/常成员变量(注意新旧编译器的写法,建议用旧的);也可以用来初始化有参数的成员对象)

关于初始化列表在构造函数章节也有过介绍,参考C++57个入门知识点_31 初始化列表及派生类中的函数隐藏(初始化列表:用于调用父类有参构造并初始化、用于自身成员初始化、对于常量成员初始化;函数隐藏:不同作用域里两个数据名称相同,由内向外隐藏)

初始化列表总结:

1. 可以用于初始化普通成员变量/常成员变量
2. 通常是用来构造有参数的成员对象

1. 初始化列表用于初始化普通成员变量/常成员变量

上篇C++57个入门知识点_40 常成员函数(用于定义不可修改内部变量的函数,一般用来修饰Get的函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)学习了const修饰成员函数,还有一个地方没讲到,那就是const也可以修饰成员变量,称为 常成员变量,在声明时就需要初始化,并且一旦定义就不能修改。

  • 对于常成员变量,在高版本的编译器中采用如下形式进行初始化是没有问题的。
const int m_nTest=1; //在低级编译器中此句是无法编译通过的,高级的是可以的

整体代码:

class CInteger
{
public:
	CInteger(int nNumber) {
		m_nNumber = nNumber;
	}
	int GetNumber() const;

	void SetNumber(int nNumber) {

		m_nNumber = nNumber;
	}

private:
	int m_nNumber;
	const int m_nTest=1;

};
  • 对于低版本的编译器,就需要利用在构造函数的初始化列表来进行初始化,采用初始化列表初始化

方法如下:

class CInteger
{
public:
	CInteger(int nNumber):
		m_nTest(1),
		m_nNumber(456),
	{
		m_nNumber = nNumber;
	}
	int GetNumber() const;

	void SetNumber(int nNumber) {
		m_nNumber = nNumber;
	}

private:
	int m_nNumber;
	const int m_nTest;
};

2. 初始化列表用于成员对象的初始化

初始化列表也可以用于类中成员对象的初始化。前面也讲过成员对象的概念,参考C++57个入门知识点_30 父子类,成员类构造析构顺序(存在父子和成员类的构造析构:构造:父类->成员类->自己;析构:自己->成员类->父类;成员类:A类对象作为B类成员,A为B成员类或朋友类)

代码如下:

class CTest {
public:
	CTest(int n,int m) {
		m_n = n;
		m_m = m;
	}
private:
	int m_n;
	int m_m;
};

class CInteger
{
public:
	CInteger(int nNumber):
		m_nTest(1),
		m_nNumber(456),
		m_t(1,2)
	{
		m_nNumber = nNumber;
	}
	int GetNumber() const;
	void SetNumber(int nNumber) {
		m_nNumber = nNumber;
	}
private:
	//CTest中存在参数,如果不进行初始化就无法进行默认的构造
	//单个参数可以采用CTest m_t=1;的形式初始化
	//多个参数在初始列表中采用m_t(1,2)的形式
	CTest m_t;//成员对象
	int m_nNumber;//如果想要在常成员函数内修改成员使用mutable int m_nNumber
	//const int m_nTest=1; //在低级编译器中此句是无法编译通过的,高级的是可以的
	const int m_nTest;
};

3.学习视频地址:常成员变量及初始化列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值