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++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员,尽可能避免使用某些成员初始化其他成员
这篇博客我觉得还是说的不够透彻,为什么有这些规定,没有深入到编译器的执行原理层面,还是等我多写点代码,对这方面了解更深入一点后再来补充吧.
不过了解不够不影响写代码,至少明面上的要求做到就好,如果懒得记多会写默认构造函数,多会用初始化列表,有个万无一失的办法:
类中写有默认值,并且使用初始化列表的构造函数,就好了.