以同样的顺序定义和初始化成员变量

原因:C++ 为了确保销毁成员的顺序是唯一的,要求初始化成员的顺序也唯一。那根据什么顺序去初始化呢,就根据成员变量在类中定义的顺序。

在构造函数中用初始化代替赋值

原因:如果不这么做,会对成员变量调用默认构造函数,然后在初始化的时候,再次调用赋值操作。但这两个步骤,可以通过初始化中直接调用成员的赋值构造函数一步实现。

避免在构造函数和析构函数中调用虚拟函数

因为: 在派生对象的成员还没有被初始化的时候就调用其成员函数很可能产生意想不到的混乱。在基类的构造期间,没有办法说清楚到底基本是一个独立的对象还是其他派生类的基类部分。

将基类的析构函数设置为公共、虚拟的或者保护、非虚拟的

因为:
如果需要通过基类指针直接析构派生类对象:派生类就需要动态地继承基类的析构函数,这就要求需要把基类的析构函数设置为公共的、虚拟的。

如果不需要通过基类指针直接析构派生类对象:那基类的析构函数不需要被子类调用,因而可以设置为保护的、非虚拟的。