【发布时间】:2015-02-15 19:54:53
【问题描述】:
我正在学习 C++ 并创建一个简单的类 tstring,由以下人员定义:
-
n字符串中的字符数; -
ntotaltstring 中的总字符数; -
p,指向包含数据的区域的指针。
因此,此类由静态部分(n、ntotal 和 p)和动态部分(数据本身)组成。
我创建了三个构造函数:
- 一个不带参数的;
- 一个拷贝构造函数;
- 一个接受 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)
有人可以解释一下区别和最佳采用方式吗?
提前谢谢你!
【问题讨论】:
-
对于这样的事情,我会使用“tstring tstring::operator+(char string[])”,因为您希望访问成员变量,而不必与类中的操作符函数成为朋友。跨度>
-
@thang 我不同意,问题在于调用
char[]+tstring,在这种情况下不起作用(即使char[]可以隐式转换为tstring,它也不会' t 被转换,因为它显示在左侧)。我认为将二元运算符声明为朋友是一个很好的经验法则。 -
@vsoftco,但是 "tstring operator+ (const tstring& myTstring, const char* string)" 不能解决这个问题,但现在你必须将该 operator+ 函数添加为好友。
-
我要做的是声明一个隐式构造函数,它将
char[]转换为tstring,即tstring::tstring(char[]),然后简单地将operator+(tstring, tstring)定义为朋友。把它当成朋友没什么不好,它不会比成员函数更破坏封装,而且它确实让生活更轻松。
标签: c++ class operator-overloading