complex& add(complex& x);
说明是以引用形式传入参数;应用中tmp=c1.add(c2);
c2是以引用形式传入的;

complex add(complex x);
x是以值形式传入两种在这个程序中效果一样;

解决方案 »

  1.   

    musicdancer:
    能说的专业一点吗?complex& add(complex& x);  这里前一个complex是什么?是类还是类的构造函数?
    后一个complex呢?
      

  2.   

    前一个complex&说明的是以引用形式返回一个值
    后一个complex&说明的是以引用形式传入一个参数
      

  3.   

    你不明白的是什么?
    ”这里前一个complex是什么?是类还是类的构造函数?“
    和构造函数有关系吗?add(complex& x);  有一个返回类型,这个返回类新型是complex类
      

  4.   

    严格来讲这是一个错误的程序。
    complex& complex::add(complex& x)
    {
        complex tmp;
        tmp.r=r+x.r;
        tmp.i=i+x.i;
        return tmp;
    }
    在返回时 tmp已经超过了生存期,当你在add()外使用它的返回值时,其实tmp已经不存在
    了,然而你用了指向tmp的指针。这是一种危险的行为。
    因为参与add的变量都不变,需要返回一个临时变量,应该:
    complex complex::add(complex& x)
    {
        complex tmp;
        tmp.r=r+x.r;
        tmp.i=i+x.i;
        return tmp;
    }
    这样是传值,就没危险了,但中间多了一个无名的变量,就多了构造和析构函数的调用,
    可以告诉c++要产生一个用于返回的临时变量:
    complex complex::add(complex& x)
    {
        return complex(r+x.r,i+x.i);
    }
    无论如何,不要返回局部变量的指针。参数用引用可以减少构造和析构函数的调用,add(complex x)就需要压栈整个对象,又需要
    对x的构造和析构函数的调用。
      

  5.   

    我同意bnj的說法,這係一個錯誤的程序
      

  6.   

     returning address of local variable or temporary