第12章 类
1 数据抽象是一种依赖于接口和实现分离的编程(和设计)技术。封装时一项将低层次的元素组合起来形成新的、高层次实体的技术。
2 初始化const 或引用以及没有默认构造函数的类类型数据成员的唯一机会是在构造函数初始化列表中。
3 隐式类型转换:可以用单个实参调用的构造函数定义了从形参类型到该类类型的一个隐式转换
explicit 只对构造函数起作用,用来抑制隐式转换。
4 使用static成员而不是全局对象有三个优点。
1) static成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突。
2) 可以实施封装。Static可以是私有成员,而全局对象不可以。
3) 通过阅读程序容易看出static成员是与特定类关联的。这种可见性可清晰地显示程序员的意图。
5 每个static数据成员是与类相关联的对象,并不与该类的对象相关联。
6 static成员函数没有this指针、不能被声明为const(static数据成员可以)、不能被声明为虚函数、不能直接使用非static成员。
7 static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用:
class Bar
{
private:
static Bar mem1;
Bar *mem2;
Bar mem3;
}
8 一般而言,类的static成员,像普通数据成员一样,不能在类的定义体中初始化。通常在定义时才初始化。
例外:只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化。但仍必须在类的定义体之外进行定义,无需再指定初始值。