如何选择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)