如何选择C++;? 我学习C++并创建一个简单的类, tStult,定义为: n字符串中的字符数 ntotalt字符串中的字符总数 p,指向包含数据的区域的指针

如何选择C++;? 我学习C++并创建一个简单的类, tStult,定义为: n字符串中的字符数 ntotalt字符串中的字符总数 p,指向包含数据的区域的指针,c++,class,operator-overloading,C++,Class,Operator Overloading,因此,此类由静态部分(n、ntotal和p)和动态部分(数据本身)组成 我创建了三个构造函数: 一个没有参数 一份复印件 一个接受C字符串参数的构造函数 我希望能够使用以下指令将一个tstring对象与一个C字符串连接起来: tstring x("Hello), y; y = x + " World"; 我想我应该重载+操作符。但是,我不明白应该使用哪种方式在内部方式之间过载: tstring tstring::operator+(char string[]) 或外部方式(使用sette

因此,此类由静态部分(
n
ntotal
p
)和动态部分(数据本身)组成

我创建了三个构造函数:

  • 一个没有参数
  • 一份复印件
  • 一个接受C字符串参数的构造函数
我希望能够使用以下指令将一个
tstring
对象与一个C字符串连接起来:

tstring x("Hello), y;
y = x + " World";
我想我应该重载
+
操作符。但是,我不明白应该使用哪种方式在内部方式之间过载:

tstring tstring::operator+(char string[])
或外部方式(使用setter和getter方法)

有人能给我解释一下两者的区别和采用的最佳方式吗


提前谢谢你

> P>在此情况下,您应该首先考虑两个<代码> TSts< /Cult> s的连接。有了这一点,您可以决定允许
tstring(const char*)
构造函数为您处理转换。通过这种方式,您将可以免费使用C字符串进行连接

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


由于使用非对称的
运算符+
是违反直觉的,因此还应该提供非成员的
运算符+(const char*,tstring const&)
,它将把参数转发给它的类内同级。

可能的重复对于类似的情况,我将使用“tstring tstring::operator+(char string[])因为您希望访问成员变量而不必与类中的运算符函数交朋友。@thang我不同意,问题在于调用
char[]
+
tstring
,在这种情况下不起作用(即使
char[]
隐式转换为
t字符串
,它不会被转换,因为它显示在左侧)。我认为将二进制运算符声明为友元是一个很好的经验法则。@vsoftco,但是“tstring operator+(const-tstring&myTstring,const-char*string)”不能解决这个问题,但是现在您必须将该运算符+函数添加为友元。我要做的是声明一个隐式构造函数,将
char[]
转换为
tstring
,例如,
tstring::tstring(char[])
,然后简单地将
operator+(tstring,tstring)
定义为朋友。将它作为朋友并没有什么错,它不会比成员函数更破坏封装,而且它肯定会让生活更轻松。这也是一个偏好问题,但我只声明一个
朋友操作符+(tstring,tstring)
,使用隐式构造函数,一切都会正常工作。
tstring operator+ (const tstring& myTstring, const char* string)