c++类的参数传递与返回值优化

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之间互为友员。

发布了22 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Skying_/article/details/84778601