1. 如果类包含内置或复合类型的成员,则该类不应该依赖于合成的默认构造函数,它应该定义自己的构造函数来初始化这些成员
2. 抑制由构造函数定义的隐式转换
explicit 关键字只能用于类内部的构造函数声明上,在类的定义体外部所做的定义不再重复它,当构造函数声明为 explicit 时,编译器将不再使用它作为转换操作符 P394
3. 对于没有定义构造函数并且其全体数据成员均为 public 的类,可以采用与初始化数组元素相同的方式初始化其成员
struct Data { int ival; char *ptr; }; // val1.ival =0; val1.ptr = 0 Data val1 = {0, 0}; // val2.ival = 1024; // val2.ptr = "Anna "; Data val2 = {1024, "Anna"};
4. 友元机制允许一个类将其对非公有成员的访问权授予指定的函数或类
友元的声明以关键字 friend 开始,只能出现在类定义的内部,友元可以是普通的非成员函数,或定义的其他类的成员函数,或整个类 P397
5. 非 static 数据成员存在于类类型的每个对象中,不像普通的数据成员,static 数据成员独立于该类的任意对象而存在;每个 static 数据成员是与类相关联的 对象,并不与该类的对象相关联;static 数据成员必须在类定义体的外部定义(正好一次),不像普通的数据成员, static 成员不是通过类构造函数进行初始 化,而是应该在定义时进行初始化 P401
double Account::interestRate = initRate();
6. static 数据成员的类型可以是该成员所属的类类型,非 static 成员被限定声明为其自身类对象的指针或引用 P402
7. 数据抽象是指定义数据和函数成员的能力,封装指从常规访问中保护类成员的能力,成员函数定义类的接口,通过将类的实现所用到的数据和函数设置为 private 来封装类 P403
8. 显示构造函数是指可以用单个实参调用但不能用于执行隐式转换的构造函数 P404
9. 当类具有指针成员时,需要类定义自己的复制控制成员 P406
10.直接初始化采用 ( ) ,复制初始化采用 = ;直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数 P406
11.以非引用类型作返回值时,将返回 return 语句中的值的副本,当形参或返回值为类类型时,由复制构造函数进行复制 P407
12.为了防止复制,类必须显式声明其复制构造函数为 private
13.动态分配的对象只有在指向该对象的指针被删除时才撤销
如果没有删除指向动态对象的指针,则不会运行该对象的析构函数,对象就会一直存在,从而导致内存泄漏
14.合成析构函数并不删除指针成员所指向的对象