一般在头文件中把存取函数定义成内联函数.
声明顺序:在类中使用特定的声明顺序:public:在private:之前,成员函数在数据成员(变量)前。
类的访问控制区段的声明顺序依次为:public:,protected:,private:.如果某区段没内容,可以不声明.
每个区段内的声明通常按以下顺序:
(1)、typedefs和枚举;
(2)、常量;
(3)、构造函数;
(4)、析构函数;
(5)、成员函数,含静态成员函数;
(6)、数据成员,含静态数据成员
宏DISALLOW_COPY_AND_ASSIGN的调用放在private:区段的末尾.它通常是类的最后部分.
.cc文件中函数的定义应尽可能和声明顺序一致.
不要在类定义中内型函数.通常,只有那些没有特别意义或性能要求高,并且是比较短小的函数才能被定义为内联函数.
编写简短函数:倾向编写简短,凝练的函数.
我们承认长函数有时是合理的,因此并不硬性限制函数的长度.如果函数超过40行,可以思索一下能不能在不影响程序结构的前提下对其进行分割.
即使一个长函数现在工作的非常好,一旦有人对其修改,有可能出现新的问题.甚至导致难以发现的bug.使函数尽量简短,便于他人阅读和修改代码.
在处理代码时,你可能会发现复杂的长函数.不要害怕修改现有代码:如果证实这些代码使用/调试困难,或者你需要使用其中的一小段代码,考虑将其分割为更加简短并易于管理的若干函数.
译者(YuleFox)笔记:
(1)、不在构造函数中做太多逻辑相关的初始化;
(2)、编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要编码者自行提供默认构造函数;
(3)、为避免隐式转换,需将单参数构造函数声明为explicit;
(4)、为避免拷贝构造函数,赋值操作的滥用和编译器自动生成,可将其声明为private且无需实现;
(5)、仅在作为数据集合时使用struct;
(6)、组合>实现继承>接口继承>私有继承,子类重载的虚函数也要声明virtual关键字,虽然编译器允许不这样做;

(7)、避免使用多重继承,使用时,除一个基类含有实现外,其他基类均为纯接口;
(8)、接口类类名以Intece为后缀,除提供带实现的虚析构函数,静态成员函数外,其他均为纯虚函数,不定义非静态数据成员,不提供构造函数,提供的话,声明为protected;
(9)、为降低复杂性,尽量不重载操作符,模板,标准类中使用时提供文档说明;
(10)、存取函数一般内联在头文件中;
(11)、声明次序:public->protected->private;
(12)、函数体尽量短小,紧凑,功能单一.
4.来自Google的齐技:
Google用了很多自己实现的技巧/工具使C++代码更加健壮,我们使用C++的方式可能和你在其它地方见到的有所不同.
智能指针:如果确实需要使用智能指针的话,scoped_ptr完全可以胜任.你应该只在非常特定的情况下使用std::tr1::shared_ptr,例如STL容器中的对象.任何情况下都不要使用auto_ptr.
“智能”指针看上去是指针,其实是附加了语义的对象.以scoped_ptr为例,scoped_ptr被销毁时,它会删除所指向的对象.shared_ptr也是如此,并且shared_ptr实现了引用计数,所以最后一个shared_ptr对象析构时,如果检测到引用次数为0,就会销毁所指向的对象.
一般来说,我们倾向于设计对象隶属明确的代码,最明确的对象隶属是根本不使用指针,直接将对象作为一个作用域或局部变量使用.另一种极端做法是,引用计数指针不属于任何对象.这种方法的问题是容易导致循环引用,或者导致某个对象无法删除的诡异状态,而且在每一次拷贝或赋值时连原子操作都会很慢.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-35033-9.html
中国可能采用撞击的方式回击一下
改变不了了
期待你带给我们更多更好的作品