一个关于在C++中重载布尔运算符的问题
A question about overloading a boolean operator in C++
对于此赋值,我们不允许使用std::string。
我有一个构造函数,它接收一个模仿DNA链的C字符串。
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {'A','C','G','T',0};
}
然后,我试图重载一个布尔运算符,该运算符将检查我创建的字符串与另一个字符串的关系。
bool DNAStrand::operator==(const DNAStrand& other) const {
if (length != other.length)
return false; //can't be the same if we don't have same # items
//Same size, walk through items looking for mismatch
for (int i = 0; i < length; i++) {
if (bases[i] != other.bases[i])
return false;
}
return true; //Must be identical
}
然而,当我尝试使用下面的代码行测试它时,isMatch3
返回true。
DNAStrand str2("AACC");
bool isMatch3 = (str2 == DNAStrand("AAGC"));
我很确定for循环有一个问题,它应该迭代C字符串中的每个字符,但我不知道问题是什么。在我看来,要么是这个问题,要么是我原来的构造函数错了。
创建DNAStrand
对象时,不会将startingString
存储在任何位置(只保留其长度(。更重要的是,您正在为所有对象设置相同的基础"ACGT":
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {'A','C','G','T',0};
}
当您在循环中比较bases
时,您正在比较左右对象中的"ACGT",并始终返回true
。
解决存储startstring
:
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {startingString};
}
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 提升精神:解析布尔表达式并简化为规范范式
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 重载更少,则运算符返回相反的布尔值
- UE4类运算符布尔()重载
- 重载运算符<<输出布尔值.为什么
- 将std::initializer_list与布尔重载函数一起使用时,重载解析出现意外行为
- 使用运算符!对重载的布尔谓词求反
- "string_literal"解析为布尔值,但不解析为 std::string,当编译器选择函数的重载版本时
- 匹配布尔值与常量 void* 重载的函数地址
- 重载布尔/字符串歧义
- 运算符重载和到布尔的隐式转换与安全布尔习惯用法有关
- 哪个操作符重载被用于ifstream对象求值为布尔值