正在看<google的C++编码规范>,对于类部分写个小结,记录一下:
1.构造函数只进行那些没有实际数据意义的初始化,需要做实际数据的初始化时,使用Init()函数来集中初始化 2.类存在成员变量时,如果没有构造函数,自己定义一个默认构造函数,不要使用编译器自动生成的构造函数 优点:默认将结构体初始化为"不可能"的值,使调试更加容易 3.对单参数构造函数使用C++关键字explicit 优点:避免不可时宜的转换 4.仅在需要拷贝一个类对象时定义拷贝构造函数,不需要拷贝时应使用DISALLOW_COPY_AND_ASSIG. 为了避免编译器自动生成的拷贝构造函数,可以定义一个private的空拷贝构造函数 5.当只有数据时,使用struct,其他时候使用class 6.使用组合通常比继承更合适,如果要使用继承,只适用公共继承.努力做到只有在"is-a"的情况下使用继承,其他"has-a"的情况下使用组合. 如果该类中有虚函数,则令析构函数为virtual 限定仅在子类访问的成员函数为protect,另外数据成员应始终为私有 在中定义派生的虚函数时,需要明确声明该函数为virtual(为了良好的代码可读性) 7.只有当最多只有一个基类中含有实现,其他基类都是以interface为后缀的纯接口类时才会使用多重继承 8.接口类需要满足: 1).只有纯虚函数和静态函数(以及虚析构函数) 2).没有非静态数据成员 3).没有定义任何构造函数,如果有,则为protected且无参数的构造函数 4).如果该interface类是子类,也只能继承满足相同条件的父类 9.基本不使用重载操作符 极少数情况需要和模板或"标准C++类"连接时的使用方法,具体见原文档 10.将数据成员私有化,并提供相关存取函数, 如:定义变量foo_();取值foo();赋值set_foo();一般可使用内联函数 11.声明次序:public在private之前,成员函数在成员变量之前 定义次序:public,protected,private 每一块的声明次序:1)typedef和enums,2)常量,3)构造函数,4)析构函数,5)成员函数(含静态成员),6)数据成员(含静态数据成员) 12.编写短小,凝练,功能单一的函数
原文档也有小结,中文文档地址