google代码规范
1. 构造函数的职责
构造函数中只进行那些没有实际意义的初始化,如果对象需要有意义的初始化,考虑使用另外的Init()方法并(或)增加一个成员标
记用于指示对象是否已经初始化成功。
2. 默认构造函数
如果一个类定义了若干成员变量又没有其他构造函数,需要定义一个默认构造函数(没有参数),否则编译器将自动生成默认构造函数。
3. 明确的构造函数
对单参数构造函数使用 C++关键字 explicit。
只有一个参数的构造函数可被用于转换(隐式转换生成一个新的对象),为避免构造函数被调用造成隐式转换,可以将其声明
为explicit。
4.结构体和类
仅当只有数据时使用struct,其它一概使用class。
5.继承
使用组合通常比使用继承更适宜,如果使用继承的话,只使用公共继承。
实现继承通过原封不动的重用基类代码减少了代码量,接口继承可用于程序上增强类的特定API的功能。
限定仅在子类访问的成员函数为protected,需要注意的是数据成员应始终为私有。
当重定义派生的虚函数时,在派生类中明确声明其为virtual。根本原因:如果遗漏virtual,阅读者需要检索类的所有祖先以确定该函数是否为虚函数。
6.多重继承
只有当最多一个基类中含有实现,其他基类都是以Interface为后缀的纯接口类时才会使用多重继承。
多重继承允许子类拥有多个基类,要将作为纯接口的基类和具有实现的基类区别开来。
7.接口
纯接口:
1) 只有纯虚函数("=0")和静态函数(下文提到的析构函数除外);
2) 没有非静态数据成员;
3) 没有定义任何构造函数。如果有,也不含参数,并且为protected;
4) 如果是子类,也只能继承满足上述条件并以Interface为后缀的类。
8. 操作符重载
一般不要重载操作符,尤其是赋值操作(operator=)比较阴险,应避免重载。如果需要的话,可以定义类似Equals()、CopyFrom()等函数。
9.存取控制
将数据成员私有化,并提供相关存取函数,如定义变量foo_及取值函数 foo()、赋值函数set_foo()。
存取函数的定义一般内联在头文件中。
10.声明次序
定义次序如下:
public:
protected:
private:
11.编写短小函数
函数尽量短小、简单,便于他人阅读和修改代码。
如果函数超过40行,可以考虑在不影响程序结构的情况下将其分割一下