//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;????有何区别?不知其理
}
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;????有何区别?不知其理
}
而你定义的是返回一个引用
CMan& CMan::operator +(CMan& manB)
{
CMan man;
man.age = age + manB.age; return man;// 应该是这样的
}
return &man;返回了man对象的地址;而return man根据给成员函数的返回值,返回的是man对象的引用。“引用”(reference)相当于变量的别名,外号,叫一个人张三,或小张都是一样的。改变引用变量的值,等同于直接改变该变量的值。而如果返回的是指针,由于变量存放的内存地址在程序的运行过程中是唯一确定的。如果你修改了该地址的内容,也就相当于改变了变量的值。这两种方法的效果是一样的。C++中力图用引用来取代这种类型的指针使用。但是对于复杂数据结构,还是需要指针的。
编译器提示:
warning:returning address of local variable or temporary
这意味着在函数内部定义的变量不能在外部操作(除非你在编hacker程序)。
{
int age;
...
CMan& operator +(CMan& manB);
}CMan& CMan::operator +(CMan& manB)
{
age += manB.age; return man;
}
改成这样就可以了。
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;
}
#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变量的缘故
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;
}即可,测试过了!