我正在学习C ++并创建一个简单的类tstring
,定义如下:
n
字符串中的字符数; ntotal
tstring中的字符总数; p
,指向包含数据的区域的指针。因此,此类由静态部分(n
,ntotal
和p
)以及动态部分(数据本身)组成。
我创建了三个构造函数:
我希望能够将一个tstring
对象与一个C字符串连接起来,例如使用说明:
tstring x("Hello), y;
y = x + " World";
我想我应该重载+
运算符。但是我不明白我应该用哪种方式在内部方式之间超载:
tstring tstring::operator+(char string[])
或外部方式(使用setter和getter方法)
tstring operator+ (const tstring& myTstring, const char* string)
有人可以解释我采用的差异和最佳方式吗?
提前谢谢!
答案 0 :(得分:1)
在这种情况下,您可能应首先考虑连接两个tstring
。有了这个,您可以决定允许tstring(const char *)
构造函数为您处理转换。通过这种方式,您可以使用C-strings免费连接。
然后您会注意到tstring
+ char []
与char []
+ tstring
的结果不同。那是因为首先会调用你的转换构造函数,第二个将找不到任何匹配的运算符。
由于具有不对称operator+
是违反直觉的,您还应该提供非成员operator+(const char *, tstring const &)
,将其参数转发给其同类兄弟。