过载==和!=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;
}
以下是可供参考的指南:
重载的相等关系运算符(运算符==)
A==B
equal关系运算符用于确定两个MyString对象是否相等。这应该比较两个对象m_pString中的每个字符,以验证两个以null结尾的字符串是否相同。如果字符串相同,则应返回true;如果不相同,则返回false。
重载的不相等关系运算符(运算符!=)
A!=B
不相等关系运算符用于确定两个MyString对象是否不相等。这应该比较两个对象m_pString中的每个字符。当字符不匹配时,它应该立即返回true。如果字符串相同,则应返回false。
根据我的理解,这个代码应该做到这一点。VB没有标记任何警告或错误。提前感谢您对我的IF声明有什么问题的意见。
这是驱动程序中Failed out的图片
1.您正在比较m_pString
的元素和right.m_pString
的长度。
2.比较逻辑似乎是错误的。
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.不要重复类似的逻辑。
bool MyString::operator!=(const MyString &right) const
{
return !operator==(right);
}
if (m_pString[i] == strlen(right.m_pString))
应该是:
if (m_pString[i] == right.m_pString[i])
您正在将字符与字符串长度进行比较。
此外,在==
实现中,如果m_pString[i] == right.m_pString[i]
,则不应该返回true。相反,您也需要继续检查所有其他字符,但如果它们是!=
,则返回false。
您的!=
实现中也存在类似的问题。
您的函数不仅不正确,而且无效,您多次调用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;
}
}
- C++Cast运算符过载
- 如何解决不明确的运算符过载问题?
- 屏幕插入运算符<<的运算符过载问题
- 对C++运算符过载的一些疑问
- C++ #include和运算符<<过载错误
- C++使 ostream 和 istream 运算符过载
- 运算符过载上未解决的外部符号
- 在Cython中损坏的非成员运算符过载(特别是操作员==)
- 通过移动分配从算术运算符过载中返回const值
- 避免对模板运算符过载的隐式参数转换
- 如何为类模板定义非成员运算符过载
- 分配运算符过载:返回void与返回参考参数
- 如何使用运算符过载添加类变量和INT变量
- 打印运算符过载失败
- 运算符 + 过载错误.无法返回对对象的引用
- 类内与类外运算符过载
- 使用许多类型运算符过载时,模棱两可的超载
- C++输入运算符过载">>"
- 一元减去运算符过载C++分段错误
- 运算符过载<<问题