文章目录
一、初始化列表
构造函数体赋值:
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。
初始化列表
初始化列表:真正初始化的位置
形式:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。
举例:
注意:
-
每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
-
类中包含以下成员,必须放在初始化列表位置进行初始化:
1)引用成员变量
2)const成员变量
3)自定义类型成员(该类没有默认构造函数)
若有默认构造函数,在初始化列表没有初始化也是正确的。 -
尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。
-
成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。
-
对于单个参数的构造函数,还具有类型转换的作用。
上述代码可读性较差,explicit修饰构造函数,将会禁止单参构造函数的隐式转换。
二、static成员
静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值。
1. static成员是所有对象共享
2. static成员变量,必须在类外初始化
初始化时,不添加static关键字
3. static成员的访问形式
1)对象.static成员
2) 类名+ :: +static成员
4. 静态成员函数没有隐藏的this指针
this指针,指向当前调用此函数的对象。因为static可以通过类名访问,通过类名访问时,没有对象,this就没有指向,所以静态成员函数没有隐藏的this指针。
总结:
-
静态成员函数不可以调用非静态成员函数
-
非静态成员函数可以调用类的静态成员函数