bool operator == (const MyString& left, const MyString& right)
{
if(left.value == right.value)
return true;
else return false;
}
bool operator != (const MyString& left, const MyString& right)
{
if(left == right)
return false;
else
return true;
}
bool operator < (const MyString& left, const MyString& right)
{
if(strcmp(left.value, right.value) == -1)
return true;
else
return false;
}
bool operator > (const MyString& left, const MyString& right)
{
if(strcmp(left.value, right.value) == 1)
return true;
else
return false;
}
bool operator <= (const MyString& left, const MyString& right)
{
if(strcmp(left.value, right.value) == -1 || strcmp(left.value, right.value) == 0)
return true;
else
return false;
}
bool operator >= (const MyString& left, const MyString& right)
{
if(strcmp(left.value, right.value) == 1 || strcmp(left.value, right.value) == 0)
return true;
else
return false;
}
这些是我为MyString类实现的比较运算符,但它们无法通过我教授给我的测试程序,并且可以使用某个方向。有什么问题?
答案 0 :(得分:1)
问题在于strcmp。您可以看到文档here。
您可以进一步将代码缩减为:
bool operator < (const MyString& left, const MyString& right)
{
return (strcmp(left.value, right.value) < 0);
}
答案 1 :(得分:1)
你可以用两个比较器来表达每个比较器:
bool operator == (const MyString& left, const MyString& right) {
return strcmp(left.value, right.value) == 0;
}
bool operator < (const MyString& left, const MyString& right) {
return strcmp(left.value, right.value) < 0;
}
bool operator != (const MyString& left, const MyString& right) {
return !(left == right);
}
bool operator > (const MyString& left, const MyString& right) {
return !(left == right) && !(left < right);
}
bool operator <= (const MyString& left, const MyString& right) {
return left < right || left == right;
}
bool operator >= (const MyString& left, const MyString& right) {
return !(left < right);
}
答案 2 :(得分:0)
我认为strcmp应该为不平等情况返回一个非零值。因此,您可能希望尝试大于0且小于0的情况,而不是使用1和-1。
答案 3 :(得分:0)
通常,您只需实施operator==
和operator<
。可以将所有其他关系运算符委托给它们,确保代码重用。在Boost中甚至还有一个CRTP mixin可以为你做这个,我相信。