所以我正在用C ++编写自己的自定义String类。在我需要重载一些比较运算符之前,一切都进行得比较顺利。
我试图以几种不同的方式修改重载运算符,但最终要么告诉我它太模糊,要么就是不接受参数。我对运算符重载的理解是,在诸如“ a
bool myString::operator<(const myString &right_side) const
{
int val = strcmp(value, right_side.data());
if (val < 0)
{
return true;
}
else
{
return true;
}
}
这是工作中的重载“ <”。这样,我可以像这样比较两个myString对象:
myString s1 = "abc";
myString s2 = "def";
assert(s1 < s2);
我也可以传递这个断言:
myString s1 = "abc";
assert (s1 < "def");
但是,当我意识到它不会使用先前定义的运算符重载时,我遇到了另一个特别的断言。请注意,顺序是从上一个示例翻转过来的。
myString s1 = "abc";
assert ("def" < s1);
我意识到我需要写第二个重载的“ <”来纠正这个问题。同样,到目前为止,我对重载的有限理解是编写函数时需要考虑的是“ <”符号右侧的部分。在这种情况下,我尝试使用
bool myString::operator<(const myString right_side) const
因为它只接受一个myString对象。我认为这会起作用。问题是,它还会导致我先前向您显示的语句中的模棱两可的问题。
assert(s1 < s2);
我已经做过一些研究,特别是关于“ explicit”关键字的用法,但是我的编译器不允许我使用它,因为根据编译器,“只有构造函数和转换运算符的声明可以是'explicit'” 。我真的不了解在这种情况下发生了什么。 任何帮助将不胜感激。