我根据要求进行了一些更新并添加了输出图片.再次感谢大家
再次感谢大家!
我很抱歉所有的主持人你会讨厌我的问题.我试过阅读这里的一些例子,但我没有得到它.我明天有一个项目,这些是我遇到问题的重载运营商.教授说问题出在我的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.
等于关系运算符用于确定两个MyString对象是否相等.这应该比较两个对象m_pString中的每个字符,以验证两个空终止字符串是否相同.如果字符串相同则返回true,否则返回false.
重载不等于关系运算符(运算符!=)
A!= B.
不等于关系运算符用于确定两个MyString对象是否不相等.这应该比较两个对象m_pString中的每个字符.如果角色不匹配,它应立即返回true.如果字符串相同,则应返回false.
根据我的理解,这段代码应该做到这一点.VB没有标记任何警告或错误.提前感谢您对我的IF语句有什么问题的任何意见.
这是驱动程序失败的图片
你在比较元素m_pString
和长度right.m_pString
.
比较逻辑似乎错了.
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); }