【C++】类和对象——深入理解初始化列表

深入理解初始化列表

  1. 概念

    • 初始化列表用于构造函数之中,旨在于优化构造函数,提高代码可读性。
    • 初始化列表就是成员变量定义的地方。
  2. 初始化列表形式

    • 以 冒号(:)开始, 逗号(,) 分割
  3. 初始化列表基本用法

    • 初始化列表定义
    • 语法结构
      class Date
      {
      public:
      	Date(int year, int month, int day)
      	:_year(year)
      	,_month(month)
      	,_day(day)
      	{}
      	
      private:
      	int _year;
      	int _month;
      	int _day;
      };
      
  4. 使用初始化列表的好处

    • 提高性能,减少不必要的默认构造和赋值操作
    • 直接初始化成员变量
    • 支持常量成员和引用成员的初始化
      • 必须用初始化列表初始化的成员
        1. 常量成员变量(用const修饰的变量)
          • 因为不能改变其值,所以必须在定义时初始化
        2. 类型为引用的变量
          • 引用的对象一旦确定不可改变,所以只能在定义时初始化
        3. 没有默认构造函数的自定义类型
          • 没有构造函数意味着得不到初始化,所以必须在初始化列表初始化
class A
{
public:
	A(int n)
	:_mon(n)
	,_goo(n)
	,_d(n)
	{}
	
private:
	const int _goo;
	int& _mon;
	int _d;
};

int main()
{
	A a1(10);
	
	return 0;
}
  1. 初始化列表的拓展用法

    • 动态内存分配
    • 类型转换赋值 & explicit关键字
    // 初始化列表的动态内存分配
    class A
    {
    public:
    	A(int n)
    	:a = new int[10]
    	{}
    
    	~A()
    	{
    		delete[] A;
    	}
    private:
    	int* a(10);
    };
    

explicit

  1. 修饰构造函数:防止单参数构造函数被用于隐式转换。
  2. 修饰转换运算符:防止类型转换函数被用于隐式转换。
class A
{
public:

	// 这是一个被explicit修饰的构造函数,它的内部将无法进行隐式类型转换
	explicit A(int n)
	:a = new int[n]
	{}
private:
	int *a;
};
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值