踩了有关默认构造函数的一个坑,于是复习了一下CPPP。
1 抽象数据类型将数据(类的数据成员)和作用于状态的操作(类的成员函数)视为一个单元。
2 在创建类的对象之前,必须完整地定义该类。必须定义类,而不只是声明类,这样,编译器就会给类的对象 预留相应的存储空间。同样地,在使用引用或指针访问类的成员之前,必须已经定义类。
5 类型类类的变量必定会在初始化阶段进行初始化。如果在构造函数的初始化列表中写明了这个变量的初始,则依据此值进行初始化,否则调用默认构造函数进行初始化。内置或者复合类型的成员的初始值依赖于对象的作用域。在局部作用域中这些成员不被初始化,在全局作用域中这些成员被初始化为零。
6 必须对任何 const 或引用类型成员以及没有默认构造函数的类类型的任何成员使用初始化式。
class ConstRef { public: ConstRef(int ii); private: int i; const int ci; int &ri; }; // no explicit constructor initializer: error ri is uninitialized ConstRef::ConstRef(int ii) { // assignments: i = ii; // ok ci = ii; // error: cannot assign to a const ri = i; // assigns to ri which was not bound to an object }
ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii) { }
9 如果动态调用构造函数。
Sales_item *p = new Sales_item();