1.类的成员变量要设置成私有
2.构造函数使用初始化列表来初始化变量
1)构造函数传递参数时,尽量使用如下形式,因为构造函数执行两件事情,初始化和赋值,而使用如下形式,则只执行了初始化操作,减少了赋值的过程
class complex
{
public:
complex(double r = 0, double i = 0): re(r), im(i){}
private:
double re, im;
};
3.私有构造函数
把构造函数设置成私有后,外界将不可以创建此类的实例,但是单例模式常常这样做,因为单例模式不允许用户新建实例,但是可以获取实例
4.类的常量成员函数const member functions
常量成员函数如下,在函数后面加const,作用是保证函数内不会存在变量值改变的情况
double real() const {return re;}
如果类的函数没有设置为常量成员函数,则类的 常量实例 来调用类的非常量成员函数时会出错,如下
class complex
{
public:
double real() {return re;}
private:
double re,im;
}
int main() {
const complex c1();
cout<<c1.real();//此处报错,因为此处调用并不想存在变量值的修改,但是此函数并没有设置为常量成员函数,此函数并不能保证无值修改
};
5.传参尽量使用引用传递而不要使用值传递
尽量使用引用传递的好处是,在传递参数时,不会新建变量来存储,即省去了栈的存储空间,也省去了拷贝带来的时间消耗
尽量使用
int add(const int& a, const int &b);
而不是
int add(int a, int b);
当然,上面的const可以去掉,但是当不希望函数对参数的值进行修改的时候,尽量使用const
6.返回值传值还是 传引用?
如果可以的情况下,返回值尽量传递引用,因为效率更高,但是有的情况必须使用值传递,比如返回的参数为函数内新建的变 量,那么当此变量作为返回值被传递出去,函数外面进行调用的时候,这个变量的空间已经被释放掉了,那么调用就会出错
7.使用友员函数?
尽量少的使用友员函数,因为友员函数可以调用此类的私有变量,破坏了封装性。
但是友员函数的好处是可以直接调用类的变量,不用通过函数来取,执行效率更高,开发更直接
8.类中 传递此类的参数 的函数,函数内可以使用参数的私有变量
class complex
{
public:
int func(const complex& param) {return param.re + param.im;}
private:
double re,rm;
};
比较合理的解释为,相同class的各个objects之间互为友员。