C++构造函数的问题总结

1.变量的定义,赋值和初始化:

简单来说,定义就是生个婴儿,初始化就是给这个baby起名字,赋值就是改名字.

详细看这里:https://www.cnblogs.com/caidi/p/9679673.html

 

2.默认构造函数:

2.1.什么是默认构造函数?

默认构造函数是在调用时不需要显示地传入实参的构造函数,是未提供显式初始值时用来构建对象的构造函数。

一般形式为:

1.构造函数没有参数,即是 A()形式的,

2.构造函数的全部参数由缺省值提供,A(int a=0,int b=0)

注意:

我之前把 参数列表初始化 和 默认构造参数有点混,这里提醒自己:

构造函数初始化列表强调初始化,可以有参数也可以没有,构造函数初始化列表 不一定是 默认构造参数;

2.2.什么时候用/写默认构造函数?

下面几种情况下,编译需要生成默认构造函数:

  • (合成复用模式)其成员对象有默认构造函数时。
  • (继承)其基类有默认构造函数时。
  • 该类的基类为虚基类时。
  • 该类有虚函数时。

第一,二不是一回事不要像我一样搞混

 

3.写构造函数的注意点:

避免“无参数的默认构造函数”和“带缺省参数的默认构造函数”同时存在,

无参数的默认构造函数和带缺省参数的默认构造函数同时存在时,编译器会产生二义性,从而生成编译错误

成员对象的类没有默认构造函数,有const成员或引用类型的成员,基类未声明默认构造函数 时只能初始化列表;

C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员,尽可能避免使用某些成员初始化其他成员

 

这篇博客我觉得还是说的不够透彻,为什么有这些规定,没有深入到编译器的执行原理层面,还是等我多写点代码,对这方面了解更深入一点后再来补充吧.

不过了解不够不影响写代码,至少明面上的要求做到就好,如果懒得记多会写默认构造函数,多会用初始化列表,有个万无一失的办法:

类中写有默认值,并且使用初始化列表的构造函数,就好了.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值