C 超载操作员 ()

C++ Overloading operator +()

本文关键字:操作员 超载      更新时间:2023-10-16

我有一个名为字符串的简单类,它具有私有字段的char*。

class String {
      char *s;
+ some public methods
};

我想超载 运算符,因此A B意味着A和B的字符串是连接的。

功能在这里:

String String::operator+(String a)
{
    String rez;
    rez.s = new char[strlen(this->s) + strlen(a.s) + 1];
    assert(rez.s);
    strcpy(rez.s, this->s);
    strcat(rez.s, a.s);
    cout<<rez.s<<endl; // HERE rez.s CONTAINS THE RIGHT STRING!
    return rez;
}

我打电话给我:c = a b;

我遇到了一个错误,称为调试断言失败。

有什么想法?

首先,阅读三个规则

然后考虑一下:

class String {
      char *s;   // << pointer
+ some public methods
};

" 某些公共方法"更好地拥有一个构造函数,该构造函数将指针成员初始化为可测试值(例如null),或者您是未定义的行为。它更好地覆盖了复制构建器和分配运算符,可以将字符串从一个字符串对象正确复制到另一个字符串对象。最后,最好有一个驱动器,该驱动器知道如何清理上述所有分配的内容的动态指针。

i 强烈建议您向后阅读该文章。