初始化列表
构造函数内可以对于成员的赋值,故不能称为是初始化,初始化只能初始化依次,C++中类对象的初始化可由初始化列表完成
- 内置类型成员可以通过设置缺省值实现初始化,但对于const修饰的成员、引用成员、没有默认构造函数的自定义类型成员,必须借助初始化列表来初始化
- 初始化列表为空或不显示时,对于自定义类型仍然会执行,会去调用其构造函数,即对于自定义类型成员变量,一定会先使用初始化列表初始化。
- 初始化列表中成员初始化的次序由成员声明的顺序决定,与初始列表中的顺序无关
- 建议成员都在初始化列表进行初始化
- 拷贝构造也有初始化列表
explicit 关键字
关于隐式类型转换
构造函数前加上 explicit 可禁止构造函数的隐式类型转换
C++11 扩展支持多参数的隐式类型转换,同样可用 explicit 禁止
静态成员
关于静态成员的引入背景
涉及一个类,统计计算机程序创建类对象的个数
- 全局变量可以解决,但是不符合C++封装理念
- 故引入静态成员变量
- 静态成员变量不属于某个对象,为所有对象共有,属于整个类
- 静态成员单独在全局进行定义初始化,可通过对象访问
静态函数的引用
- 静态成员可通过对象的成员函数访问
- 为解决访问时对象所在域内未定义类对象的问题
- 引入静态成员函数,用 static 修饰成员函数
- 静态成员函数没有隐含的 this 指针参数
- 可直接通过类名访问静态成员函数
匿名对象
A()
// 匿名对象的生命周期是其所在的一行
- 常用来调用类
- 函数返回对象时,也可以使用匿名对象
友元
友元提供了一种突破封装的方式,但是破环了耦合,不宜多用
- 对于<<运算符重载这种需自定义参数、不需要this的函数、且需要访问类成员的函数,可以用friend修饰为友元函数解决
- 友元类是单向的