我正在学习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)
有人可以解释我的区别和最佳采用方式吗?
先感谢您!
最佳答案
在这种情况下,您可能应该首先考虑两个tstring
的串联。有了这个,您可以决定允许tstring(const char *)
构造函数为您处理转换。这样,您将可以免费连接C字符串。
然后您会注意到tstring
+ char []
与char []
+ tstring
产生的结果不同。那是因为第一个将调用转换的构造函数,第二个将找不到任何匹配的运算符。
由于具有不对称的operator+
是违反直觉的,因此您还应该提供非成员的operator+(const char *, tstring const &)
,它将其参数转发给其同级同级。