Google C++编程风格指南(三):C++类
p;)),如果被证明是正当的尚可接受,但你要尽可能避免这样做。尤其是不要仅仅为了在STL容器中作为key使用就重载operator==或 operator<,取而代之,你应该在声明容器的时候,创建相等判断和大小比较的仿函数类型。
有些STL算法确实需要重载operator==时可以这么做,不要忘了提供文档说明原因。 参考拷贝构造函数和函数重载。 10. 存取控制(Access Control) 将数据成员私有化,并提供相关存取函数,如定义变量foo_及取值函数foo()、赋值函数set_foo()。 存取函数的定义一般内联在头文件中。 参考继承和函数命名。 11. 声明次序(Declaration Order) 在类中使用特定的声明次序:public:在private:之前,成员函数在数据成员(变量)前。 定义次序如下:public:、protected:、private:,如果那一块没有,直接忽略即可。 每一块中,声明次序一般如下: 1) typedefs和enums; 2) 常量; 3) 构造函数; 4) 析构函数; 5) 成员函数,含静态成员函数; 6) 数据成员,含静态数据成员。 宏DISALLOW_COPY_AND_ASSIGN置于private:块之后,作为类的最后部分。参考拷贝构造函数。 .cc文件中函数的定义应尽可能和声明次序一致。 不要将大型函数内联到类的定义中,通常,只有那些没有特别意义的或者性能要求高的,并且是比较短小的函数才被定义为内联函数。更多细节参考译文第一篇的内联函数。 12. 编写短小函数(Write Short Functions) 倾向于选择短小、凝练的函数。 长函数有时是恰当的,因此对于函数长度并没有严格限制。如果函数超过40行,可以考虑在不影响程序结构的情况下将其分割一下。 即使一个长函数现在工作的非常好,一旦有人对其修改,有可能出现新的问题,甚至导致难以发现的bugs。使函数尽量短小、简单,便于他人阅读和修改代码。 在处理代码时,你可能会发现复杂的长函数,不要害怕修改现有代码:如果证实这些代码使用、调试困难,或者你需要使用其中的一小块,考虑将其分割为更加短小、易于管理的若干函数。 ______________________________________ 译者:关于类的注意事项,总结一下: 1. 不在构造函数中做太多逻辑相关的初始化; 2. 编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数; 3. 为避免隐式转换,需将单参数构造函数声明为explicit; 4. 为避免拷贝构造函数、赋值操作的滥用和编译器自动生成,可目前声明其为private且无需实现; 5. 仅在作为数据集合时使用struct; 6. 组合>实现继承>接口继承>私有继承,子类重载的虚函数也要声明virtual关键字,虽然编译器允许不这样做; 7. 避免使用多重继承,使用时,除一个基类含有实现外,其他基类均为纯接口; 8. 接口类类名以Interface为后缀,除提供带实现的虚析构函数、静态成员函数外,其他均为纯虚函数,不定义非静态数据成员,不提供构造函数,提供的话,声明为protected; 9. 为降低复杂性,尽量不重载操作符,模板、标准类中使用时提供文档说明; 10. 存取函数一般内联在头文件中; 11. 声明次序:public->protected->private; |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |