我正在学习C++并创建一个简单的类tstring,它由以下方式定义:

  • n字符串中的字符数;
  • ntotal tstring中的字符总数;
  • p,指向包含数据的区域的指针。

  • 因此,此类由静态部分(nntotalp)和动态部分(数据本身)组成。

    我创建了三个构造函数:
  • 没有参数;
  • 一个副本构造函数;
  • 一个带有C字符串参数的构造函数。

  • 我希望能够使用一个指令将一个tstring对象与一个C字符串连接起来:
    tstring x("Hello), y;
    y = x + " World";
    

    我想我应该重载+运算符。但是我不明白在内部方式之间应该使用哪种方式重载它:
    tstring tstring::operator+(char string[])
    

    或外部方式(使用setter和getter方法)
    tstring operator+ (const tstring& myTstring, const char* string)
    

    有人可以解释我的区别和最佳采用方式吗?

    先感谢您!

    最佳答案

    在这种情况下,您可能应该首先考虑两个tstring的串联。有了这个,您可以决定允许tstring(const char *)构造函数为您处理转换。这样,您将可以免费连接C字符串。

    然后您会注意到tstring + char []char [] + tstring产生的结果不同。那是因为第一个将调用转换的构造函数,第二个将找不到任何匹配的运算符。

    由于具有不对称的operator+是违反直觉的,因此您还应该提供非成员的operator+(const char *, tstring const &),它将其参数转发给其同级同级。

    10-04 21:14