一个关于在C++中重载布尔运算符的问题

A question about overloading a boolean operator in C++

本文关键字:重载 布尔 运算符 问题 C++ 一个      更新时间:2023-10-16

对于此赋值,我们不允许使用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};
}