两个对象相加没有问题,多个对象相加会报错
// 全局函数重载+
Person operator+(Person& q, Person& p)
{
Person temp;
temp.height = q.height + p.height;
temp.weight = q.weight + p.weight;
return temp;
}
int main()
{
Person p1(10, 10);
Person p2(20, 20);
Person p3(30, 30);
Person p4(40, 40);
Person p5(50, 50);
cout << (p1 + p2 + p3 + p4 + p5).height << endl;
cout << (p1 + p2 + p3 + p4 + p5).weight << endl;
返回引用输出错误
+运算符重载,返回值不用引用的时候是正确的,用引用反而是错误的。
用引用的时候,返回的变量是在重载运算符函数中声明的临时变量的引用,但是这个变量出了函数后,就被系统回收了。所以返回得到的就是一个被回收了的变量,这个变量的值是不确定的。所以,结果就是错误的。
下面是不用引用的时候的VS2008运行结果:
下面是用引用的时候的运行结果:
Person s1 = p1 + p2;
Person s2 = p3 + p4;
Person s3 = s1 + s2;
Person s4 = s3 + p5;
std::cout << s4.height() << s4.weight() << std::endl;
这样写吧,貌似不允许多个对象相加...
如果不行,那就是不允许相同类的相加操作了,我以前玩的时候都是搞不同类之间的操作的,同一个类没试过...
如果你只是想获得相加后的数据,直接拿对象.height相加就好了
你可以重新看一下重载的定义,重载加号只需要一个参数,另一个参数是自己
参数是引用类型,返回值不是引用类型,你就不能连续加。把返回值改为引用类型试试
你这两个参数的时候调用的也不对呀,根本不是p1+p2这样调用的啊
参数改成const T&
T 就是你的类