没有明显的过载运气

时间:2019-04-27 00:46:42

标签: c++ operator-overloading

所以我正在用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'” 。我真的不了解在这种情况下发生了什么。 任何帮助将不胜感激。

0 个答案:

没有答案