//demo:
class CMan
{
int age;
...
CMan& operator +(CMan& manB);
}CMan& CMan::operator +(CMan& manB)
//CMan& CMan::operator +(CMan& manB)与CMan CMan::operator +(CMan& manB)
//有何区别????在什么情况下用什么形式???请解释一下,多谢大虾了!!!
{
    CMan man;
    man.age = age + manB.age;   return &man;//还是return man;????有何区别?不知其理
}

解决方案 »

  1.   

    return man;return &man;是返回内存地址
    而你定义的是返回一个引用
      

  2.   

    上面的程序不对,使用什么样的运算符重载应该视运算而定。
    CMan& CMan::operator +(CMan& manB)
    {
        CMan man;
        man.age = age + manB.age;    return man;// 应该是这样的
    }
    return &man;返回了man对象的地址;而return man根据给成员函数的返回值,返回的是man对象的引用。“引用”(reference)相当于变量的别名,外号,叫一个人张三,或小张都是一样的。改变引用变量的值,等同于直接改变该变量的值。而如果返回的是指针,由于变量存放的内存地址在程序的运行过程中是唯一确定的。如果你修改了该地址的内容,也就相当于改变了变量的值。这两种方法的效果是一样的。C++中力图用引用来取代这种类型的指针使用。但是对于复杂数据结构,还是需要指针的。
      

  3.   

    使用 return man;
    编译器提示:
    warning:returning address of local variable or temporary
      

  4.   

    警告的意思是Cman是一个自动变量,退出函数(return)以后其内存空间就被重新分配了,所以它占用的是临时空间。
    这意味着在函数内部定义的变量不能在外部操作(除非你在编hacker程序)。
      

  5.   

    class CMan
    {
    int age;
    ...
    CMan& operator +(CMan& manB);
    }CMan& CMan::operator +(CMan& manB)
    {
        age += manB.age;    return man;
    }
    改成这样就可以了。
      

  6.   

    使用return &man才会提上上述信息。
      

  7.   

    To seeclear(看得清楚) :
    class CMan
    {
    int age;
    ...
    CMan& operator +(CMan& manB);
    }CMan& CMan::operator +(CMan& manB)
    {
        age += manB.age;    return man;
    }man在哪里呢?你的意思是不是:
    class CMan
    {
    int age;
    ...
    CMan& operator +(CMan& manB);
    }CMan& CMan::operator +(CMan& manB)
    {
        ManB.age += age;    return manB;
    }
      

  8.   

    #include <iostream.h>
    #include <conio.h>class CMan
    {
    public:
    int Age;
    CMan& operator + (CMan& manB);
    CMan& operator = (CMan& manB);
    };CMan& CMan::operator + (CMan& manB)
    {
    CMan man; man.Age = Age + manB.Age ; return man;
    }CMan& CMan::operator = (CMan& manB)
    {
    CMan man; man.Age = manB.Age ; return man;
    }
    void main()
    {
    CMan A;
    CMan B;
    CMan C; A.Age = 20;
    B.Age = 22; C = A + B; cout<<C.Age; getch();}这两种情况我都跟踪了一下,都是在 operator + 函数中return后值不能传给C变量的缘故
      

  9.   

    声明:
    CMan operator + (CMan& manB);
    CMan operator = (CMan& manB);如下实现:CMan CMan::operator +(CMan& manB)
    {
      age+=manB.age;
      return *this;
    }CMan CMan::operator =(CMan& manB)
    {
      age=manB.age;
      return *this;
    }即可,测试过了!