【C++】Google C++编码规范(二):类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/82707071

1、构造函数

不要在构造函数中进行复杂的初始化 (尤其是那些有可能失败或者需要调用虚函数的初始化).
构造函数不得调用虚函数, 或尝试报告一个非致命错误. 如果对象需要进行有意义的 初始化, 考虑使用明确的 Init() 方法或使用工厂模式.

2、初始化

第一种方法:构造函数内部初始化
MYClass::MYClass() { x=0; y=1; }
第二种方法: 使用成员初始化列表,推荐用第二种
MYClass::MYClass() : x(0), y(1) { }

3、显式构造函数

所有单参数构造函数都必须是显式的. 在类定义中, 将关键字 explicit 加到单参数构造函数前,避免不合时宜的隐式变换
如:explicit Foo(string name);

4、拷贝构造函数

如果对象是唯一的,比如Qt的QObject及其继承类的对象,都代表着唯一,不能赋值,需要将拷贝构造函数设置成私有的private,或用“=delete”来初始化。

5、移动构造函数

什么是移动构造函数?下面的博客讲的比较清除
https://blog.csdn.net/u010087886/article/details/51037890
https://www.zhihu.com/question/22111546

6、委派和继承构造函数

只在能够减少冗余代码, 提高可读性的前提下使用委派和继承构造函数. 如果
派生类有新的成员变量, 那么使用继承构造函数时要小心. 如果在派生类中对成员
变量使用了类内部初始化的话, 继承构造函数还是适用的.

7、struct和class

成员只有数据,并且是通过位域(.或->)来存取成员时,使用struct;
stuct中可以定义构造函数, 析构函数, Initialize(), Reset(), Validate() 等类似的函数;
其它一概使用 class;

8、继承

所有继承必须是 public 的. 如果你想使用私有继承, 你应该替换成把基类的实例作为成员对象的方式(使用组合设计模式);
只有当 子类 “is-a” 父类时,才使用继承,“has-a” 情况下请使用组合;
如果类有虚函数, 则析构函数也应该为虚函数;
#### 9、多重继承
真正需要用到多重实现继承的情况少之又少. 只在以下情况我们才允许多重继承: 最多只有一个基类是非抽象类; 其它基类都是接口类(纯虚类);
接口类应该是只提供方法声明,而自身不提供方法定义的抽象类。接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成;
#### 10、运算符重载
一般不要重载运算符. 尤其是赋值操作 (operator=) 比较诡异, 应避免重载。
可以在声明容器的时候, 创建相等判断和大小比较的仿函数类型

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/82707071