重载的操作员功能失败

时间:2013-11-23 16:07:27

标签: c++ operator-overloading

这里我写了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);

};

2 个答案:

答案 0 :(得分:2)

你的问题在这里:

~stringb()
{
    delete p; // <<<<<
}

如果temp超出了运营商定义中的范围,则会执行此操作。

要使代码正常运行,您需要在stringb课程中正确实施 Rule of Three 。您也可以查看这个不错的IDE one sampleP0W已从您的代码中进行设置。

答案 1 :(得分:0)

尝试返回参考:

stringb& operator+(const stringb &a, const stringb &b);
{
   stringb *temp = new stringb();
   temp->len = a.len + b.len;
   [...]
   return *(temp);
}