C++高级编程【初始化列表】

本文详细阐述了C++中对象的创建方式,重点讲解了构造函数的作用、默认构造与拷贝构造的区别,以及初始化列表的使用规则。通过实例演示了如何解决对象成员初始化的问题,包括const成员、引用成员和多重构造函数情况。最后总结了初始化列表的重要性和优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++创建对象的方式

1. 分配内存
2. 调用构造函数(初始化对象成员)‘

.

程序结束时

  1. 先调用析构函数
  2. 在释放对象

构造函数的特点

  • 如果类内部提供了构造函数,编译器不在提供默认的构造函数,但是提供默认拷贝构造(逐字节拷贝)
  • 如果类内部提供了拷贝构造函数,编译器将不再提供任何的构造函数

初始化列表

问题:

当类的内部包含了类对象成员
对象类内部提供了多个构造函数,我们将如果指定调用那个构造函数?

初始化列表完美的解决了这个问题
注意:初始化列表只能在构造函数中使用

示例

class Student
{
public:
	Student()
	{
	}
	Student(string name,int age)
	{
	}
private:
	int mAge;
	string mName;
}	

class Teacher
{

public:
	//初始化列表语法
	//Teacher(string name,int age) : mStu(name,age)  //给初始化列表传参
	Teacher() : mStu("wuyou",10)
	{
	}

	 Student mStu;
}

void test()
{	
	Teacher t("wuyou",10);
}

初始化列表初始化常量

class Demo
{
public:
	Demo() :a(10),ref(20)
	{
		a = 10; //err 
	}
	const int a; 
	//万能引用
	const int &ref;
}

初始化的优先级

初始化列表优先级高于构造函数
当类内部包含对象成员,编译器会调用对称成员的默认构造函数
首先创建对象成员

总结

  1. 初始化列表解决了不同场景中初始化对象成员的问题
  2. 解决了const修饰的成员变量不能在构造函数中初始化的问题
  3. 成员变量中出现引用时,必须使用初始化列
  4. 多个初始列表使用逗号隔开
  5. 如果一个构造函数写了初始化列表,所有构造函数都必须写初始化列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值