1.4参数传递与返回值(1)

来源:互联网 发布:switch case语句 php 编辑:程序博客网 时间:2024/06/15 19:21

继续分析complex类

const member functions(常量成员函数)

 

上图类中的函数:

    double real () const {return re;}

    double imag () const {return im;}

以上两个类中的函数不改变类中的成员data变量,所以加const。 

 Note:不会改变类中的数据内容的函数,马上加上const。

  有const修饰real函数和imag函数时,以下两种情况均可。

       

 第二种情况为定义了一个const对象,表明该对象的data是不可改变的。


但是无const修饰的real函数和imag函数时,第二种情况创建对象时使用const了,表明创建的对象的data不可以改变;但是调用的无const修饰的real函数和imag函数表明real函数和imag函数可能会改data,前后矛盾,编译器会报错。   所以在函数不改变data时,切记加上const


·参数传递: pass by value vs. pass by reference (to const)


  尽量不要使用pass by value(传值)。

  pass by reference(传引用):相当于传指针,引用在底层就是一个指针(C中可以传指针(即地址)),指针和引用在底层的实现是一样的。

   pass by reference to const: 

      上图中黄色部分参数中const complex&,&表明pass by reference,加上const 表明 pass by reference to const,const 限制不可以改变引用所指向的data,如果改变,则编译出错。

  pass by reference:

    上图中黄色部分参数中ostream& 表明pass by reference,无const,表明该参数所在函数会对传进来的参数做改变,不然的话应该加const。

 pass by value: value多大就整个传多大,将value压到栈中。

    上图中黄色部分参数中double 没有&表明是pass by value。


NOTE:建立一个良好的习惯,所有的参数传递都尽量 pass by reference,尽量不要pass by value。

        当然细节上如果传递value时,传递使用的存储空间小于传递引用使用的存储空间时,还是选择pass by value。


结论: 参数传递尽量都传引用,当传递的数据所占存储空间很小时,可以选择传值。

0 0
原创粉丝点击