在 C++ 中重载 == 和 != 运算符
Overloaded == and != operators in C++
我根据要求进行了一些更新并添加了输出图片。再次感谢大家
再次感谢大家!!
我提前向所有版主道歉,你们会讨厌我的问题。我已经尝试阅读此处的一些示例,但我没有理解。我有一个明天到期的项目,这些是我遇到麻烦的超载操作员。教授说问题出在我的 if 语句中,但不会告诉我我做错了什么。
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] == right.m_pString[i])
{
return false;
}
}
return true;
}
bool MyString::operator!=(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
{
return false;
}
}
return true;
}
以下是参考指南:
重载相等关系运算符 ( operator== )
A == B
相等关系运算符用于判断两个MyString对象是否相等。这应该比较两个对象 m_pString 中的每个字符,以验证两个空终止字符串是否相同。如果字符串相同,这应该 return 为真,否则为假。
重载不等于关系运算符 ( operator!= )
A != B
不等于关系运算符用于判断两个MyString对象是否不相等。这应该比较两个对象 m_pString 中的每个字符。如果字符不匹配,它应该 return 立即为真。如果字符串相同,这应该 return 为假。
根据我的理解,这段代码应该可以做到这一点。 VB 没有标记任何警告或错误。预先感谢您对我的 IF 语句有什么问题的任何意见。
This is a picture of the Failed out put from the driver program
if (m_pString[i] == strlen(right.m_pString))
应该是:
if (m_pString[i] == right.m_pString[i])
您正在将字符与字符串长度进行比较。
此外,在 ==
实现中,如果 m_pString[i] == right.m_pString[i]
,则不应 returning 为真。相反,您还需要继续检查所有其他字符,但如果它们是 !=
.
,则 return 为 false
您在 !=
实施中遇到了类似的问题。
1.You正在比较m_pString
的元素和right.m_pString
的长度。
2.The比较逻辑好像不对
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
// ~~ ~~~~~~~~~~~~~~~~~~
{
return false;
// ~~~~~
}
}
return true;
// ~~~~
}
3.Don类似逻辑不再重复
bool MyString::operator!=(const MyString &right) const
{
return !operator==(right);
}
你的功能不仅不正确,而且无效,你调用strlen()
的次数太多了:
bool MyString::operator==(const MyString &right) const
{
for (size_t i = 0; true; ++i)
{
if (m_pString[i] != right.m_pString[i] )
return false;
if (m_pString[i] == 0 )
return true;
}
}
我根据要求进行了一些更新并添加了输出图片。再次感谢大家
再次感谢大家!!
我提前向所有版主道歉,你们会讨厌我的问题。我已经尝试阅读此处的一些示例,但我没有理解。我有一个明天到期的项目,这些是我遇到麻烦的超载操作员。教授说问题出在我的 if 语句中,但不会告诉我我做错了什么。
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] == right.m_pString[i])
{
return false;
}
}
return true;
}
bool MyString::operator!=(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
{
return false;
}
}
return true;
}
以下是参考指南:
重载相等关系运算符 ( operator== )
A == B
相等关系运算符用于判断两个MyString对象是否相等。这应该比较两个对象 m_pString 中的每个字符,以验证两个空终止字符串是否相同。如果字符串相同,这应该 return 为真,否则为假。
重载不等于关系运算符 ( operator!= )
A != B
不等于关系运算符用于判断两个MyString对象是否不相等。这应该比较两个对象 m_pString 中的每个字符。如果字符不匹配,它应该 return 立即为真。如果字符串相同,这应该 return 为假。
根据我的理解,这段代码应该可以做到这一点。 VB 没有标记任何警告或错误。预先感谢您对我的 IF 语句有什么问题的任何意见。
This is a picture of the Failed out put from the driver program
if (m_pString[i] == strlen(right.m_pString))
应该是:
if (m_pString[i] == right.m_pString[i])
您正在将字符与字符串长度进行比较。
此外,在 ==
实现中,如果 m_pString[i] == right.m_pString[i]
,则不应 returning 为真。相反,您还需要继续检查所有其他字符,但如果它们是 !=
.
您在 !=
实施中遇到了类似的问题。
1.You正在比较m_pString
的元素和right.m_pString
的长度。
2.The比较逻辑好像不对
bool MyString::operator==(const MyString &right) const
{
if (strlen(m_pString) != strlen(right.m_pString))
{
return false;
}
for (size_t i = 0; i < strlen(m_pString); ++i)
{
if (m_pString[i] != right.m_pString[i])
// ~~ ~~~~~~~~~~~~~~~~~~
{
return false;
// ~~~~~
}
}
return true;
// ~~~~
}
3.Don类似逻辑不再重复
bool MyString::operator!=(const MyString &right) const
{
return !operator==(right);
}
你的功能不仅不正确,而且无效,你调用strlen()
的次数太多了:
bool MyString::operator==(const MyString &right) const
{
for (size_t i = 0; true; ++i)
{
if (m_pString[i] != right.m_pString[i] )
return false;
if (m_pString[i] == 0 )
return true;
}
}