C++谁来帮我看看这个程序哪里出错了

来源:百度知道 编辑:UC知道 时间:2024/06/24 15:49:45
#include <iostream>
#include <string>
using namespace std;

class plus
{
public:
friend const plus& operator+(const plus& a,const plus& b)
{
plus result;
result.str = a.str + b.str;
return result;
}

plus& operator =(const plus& a)
{
this->str=a.str;
return *this;
}
friend ostream & operator << ( ostream & os , const plus& a)
{
os << a.str;
return os;
}

public:
string str;

};
int main()
{
plus a={"AB"};
plus b={"CD"};
plus c;
c=a+b;
cout<<c;
return 0;
}

friend const plus& operator+(const plus& a,const plus& b)
{
plus result;
result.str = a.str + b.str;
return result;
}

这个函数中 result 是临时变量,出了这个函数,它就被注销,而你返回的是一个被注销了的变量的引用,所以出错,应改为
friend const plus& operator+(const plus& a,const plus& b)
{
plus *result = new plus;//分配堆内存给它,让它的生命周期由你来控制,直到你用delete来销毁它
result.str = a.str + b.str;
return *result;
}

friend const plus& operator+(const plus& a,const plus& b)
{
plus result;
result.str = a.str + b.str;
return result;
}

这个函数的返回值为局部变量
最好写成
a.str = a.str + b.str;
return a;
去掉plus result; 这一句。

命名空间的问题