构造函数初始化列表的问题

无法按照表达式中的算符来修改值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

值没有按照初始化列表中的来赋值。

原因

在构造函数体中又多此一举的添加了

	m_name = name;
	m_age = age;

把这些代码注释掉就行。
在这里插入图片描述

修改以下:
在这里插入图片描述

基本原则

构造函数的执行可以分成两个阶段:初始化阶段和计算阶段(初始化阶段先于计算阶段)。

  1. 初始化阶段:全部的成员都会在初始化阶段初始化。
  2. 计算阶段:一般是指用于执行构造函数体内的赋值操作。

在计算阶段不用进行赋值操作,否则就是多此一举。

由此引申的问题

对于类成员初始化,可以使用初始化列表也可以在构造函数中赋值(就是上面的两种方法,但不能同时使用,出现的问题上面也描述了)

但使用初始化列表对类成员初始化,在构造函数中赋值对类成员初始化,这两种方法的底层调用逻辑不一样。

流程都是:实参–>形式参数–>类成员
(用类创建对象时,先初始化构造函数的形参对象,然后再初始化类成员)
区分在于:

使用初始化列表对类成员初始化

实参->构造函数形参,调用传递参数(类)的拷贝构造函数
构造函数形参->类成员变量,调用传递参数(类)的拷贝构造函数
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在构造函数中赋值对类成员初始化

实参->构造函数形参,调用传递参数(类)的拷贝构造函数
构造函数形参->类成员变量,先创建成员类的对象(将调用成员类的普通构造函数),然后再将构造函数形参的值赋值给类成员变量(赋值)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

针对构造函数传参,使用引用的情况

在构造函数中参数使用引用,就省去了从实参到构造函数形参时,调用拷贝构造函数的过程。

使用初始化列表对类成员初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在构造函数中赋值对类成员初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将属性也使用引用

建议以后都使用初始化列表,不要一会儿初始化列表,一会儿又在构造函数内使用赋值语句初始化,会出问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

如果使用初始化列表的赋值方案:
在构造函数参数中使用引用,省去了从实参到构造函数形参时,调用拷贝构造函数的过程。
在类成员变量中使用引用,省去了从构造函数形参到类变量时,调用拷贝构造函数的过程。

这里就不讨论构造函数内赋值初始化了,以后建议都是统一使用构造函数的初始化列表来初始化类成员变量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值