1,让接口容易被正确使用
促进正确使用:保持接口一致性,增加内置类型的兼容
阻止误用:通过建立新类型及限制类型的操作,对参数加以束缚,减少意外的失误。
2,设计class犹如设计type
C++定义一个类的时候,也就设计出了一种新的类型,我们需要谨慎考虑以下几点:
a,class对象应该如何创建与销毁?
b,对象的初始化与赋值该有怎么样差别?
c,对象如果进行值传递,会有什么影响?
d,如何对成员变量进行有效范围的约束?
e,新的class的继承关系。
f,如何进行正确的类型转换?
g,我们需要进行什么样的操作符和函数的重写,以及禁用某些默认函数。
h,你真的需要定义一个新的class吗?
3,尽量用带const的引用传递代替值传递。
值传递的时候会额外调用一次拷贝构造函数和析构函数,这样是非常消耗资源的。而且有时候也会出错,例如这个例子:
class A
{
public:
A()
{
}
virtual void show() { std::cout <<"A"<<std::endl; }
};
class B :public A
{
public:
B() { }
virtual void show() { std::cout << "B"<<std::endl; }
};
void func(A a)
{
a.show();
}
int main()
{
B b;
func(b);
std::cout << "Hello World!\n";
}
打印结果就是A!
而我们使用引用传递的结果就是B,引用传递还可以减少传递的资源消耗,因为引用传递的本质是指针传递。
但是对于内置类型或者stl的迭代器或者函数对象,这个结论不一定适用,值传递可能会更快。
4,对于函数的返回值,不要返回局部变量的引用或指针
这个比较好理解