如何在C ++中选择哪个运算符重载?

时间:2015-02-15 19:54:54

标签: c++ class operator-overloading

我正在学习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)

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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可能应首先考虑连接两个tstring。有了这个,您可以决定允许tstring(const char *)构造函数为您处理转换。通过这种方式,您可以使用C-strings免费连接。

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

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