5. “类”相关的编码规范
(1)不要在类的构造函数和析构函数中去调用虚函数
因为如果一个类里面有虚函数,那么这个类的对象就有属于自己的虚函数表,虚函数表里面包含了所有的虚函数的指针,如果派生类的构造函数和析构函数中调用了虚函数的话,那么他的派生类(也就是子类)是不会定位到其父类的虚函数实现的。
(2)建议大家在平时定义类的时候,使用初始化列表的形式来构建对象,并且将构造函数和析构函数以及初始化对象都放在类外面进行实现
因为使用初始化列表构造对象,比起构造函数的代码块初始化效率更高、性能更好。
// 在头文件serven.h中定义一个SERVEN类
class SERVEN{
public:
SERVEN():{};
private:
int serven_1;
char* serven_2;
};
// 在源文件serven.cpp中初始化类的属性
SERVEN::SERVEN():serven_1(0),serven_2(nullptr){}
(3) 仅当只有数据成员时使用struct,其它一概使用class
当一个结构里面只有属性,没有方法的时候一般使用struct类进行定义,其余的使用class来封装成一个类。
(4) 尽量避免菱形继承
菱形继承是指,两个子类继承了同一个父类,然后有另外一个类继承了上面的两个子类:
代码为:
// 类SERVEN_1
class SERVEN_1{
...
}
// 类SERVEN_2 继承类 SERVEN_1
class SERVEN_2: public SERVEN_1{
...
}
// 类SERVEN_3 继承类 SERVEN_1
class SERVEN_3: public SERVEN_1{
...
}
// 类SERVEN_4 继承类 SERVEN_2 和 类 SERVEN_3
class SERVEN_4: public SERVEN_2, SERVEN_3{
}
(5) 一般使用public公有继承
(6) 如果这个类定义了虚函数,那么这个类的析构函数建议定义为虚函数
在声明重载时,请使用override、final或virtual的其中之一进行标记。
(7) 将所有的类的属性和方法都定义为私有private,除非那些静态static成员
这么做的原因是要求对数据成员进行存取控制。



