这里我写了2个重载运算符:
stringb operator+(const stringb &a,const stringb &b)
{
stringb temp;
temp.len = a.len + b.len;
temp.p=new char[(temp.len)+1];
strcpy(temp.p, a.p);
strcat(temp.p, b.p);
return (temp);
}
stringb operator-(const stringb &a,const stringb &b)
{
stringb temp;
temp.len=a.len-b.len;
temp.p=new char[temp.len+1];
strcpy(temp.p,a.p);
return (temp);
}
然而,当我编译实际代码时,整个代码工作除了我调用这些操作符时的部分,我得到垃圾输出。我的职能有什么问题?
编辑:stringb类声明:
class stringb
{
public:
char *p;
int len;
public:
stringb()
{
len=0;
p=0;
}
stringb(const char *s)
{
len=strlen(s);
p=new char[len+1];
strcpy(p,s);
}
stringb(const stringb &s)
{
len=s.len;//strlen(s);
p=new char[len+1];
strcpy(p,s.p);
}
~stringb()
{
delete p;
}
friend int operator==(const stringb &a,const stringb &b);
friend stringb operator+(const stringb &a,const stringb &b);
friend stringb operator-(const stringb &a,const stringb &b);
friend void putstring(const stringb a);
};
答案 0 :(得分:2)
你的问题在这里:
~stringb()
{
delete p; // <<<<<
}
如果temp
超出了运营商定义中的范围,则会执行此操作。
要使代码正常运行,您需要在stringb
课程中正确实施 Rule of Three 。您也可以查看这个不错的IDE one sample,P0W已从您的代码中进行设置。
答案 1 :(得分:0)
尝试返回参考:
stringb& operator+(const stringb &a, const stringb &b);
{
stringb *temp = new stringb();
temp->len = a.len + b.len;
[...]
return *(temp);
}