我有一个任务类,它有一个string text
私人成员。我访问变量 trough const string getText() const;
。
我想重载==
运算符以检查对象的不同实例是否具有相同的文本。
我已经bool operator==( const Task text2 ) const;
在类头上声明了一个 public 并像这样编码:
bool Task::operator==( const Task text2 ) const {
return strcmp( text.c_str(), text2.getText().c_str() ) == 0;
}
但即使字符串相等,它也总是返回 false。
所以我在里面添加了一个 cout 调用bool operator==( const Task text2 ) const;
来检查它是否被调用,但什么也没得到。
似乎我的自定义==
运算符从未被调用过。
我的标题:
#ifndef TASK_H
#define TASK_H
#include <iostream>
using namespace std;
class Task {
public:
enum Status { COMPLETED, PENDIENT };
Task(string text);
~Task();
// SETTERS
void setText(string text);
void setStatus(Status status);
// GETTERS
const string getText() const;
const bool getStatus() const;
const int getID() const;
const int getCount() const;
// UTILS
//serialize
const void printFormatted() const;
// OVERLOAD
// = expression comparing text
bool operator==( const Task &text2 ) const;
private:
void setID();
static int count;
int id;
string text;
Status status;
};
#endif
编辑了重载操作以使用引用,并摆脱了 strcmp:
bool Task::operator==( const Task &text2 ) const {
return this->text == text2.getText();
}
主文件:
using namespace std;
int main() {
Task *t = new Task("Second task");
Task *t2 = new Task("Second task");
cout << "Total: " << t->getCount() << endl;
t->printFormatted();
t2->printFormatted();
if( t == t2 ) {
cout << "EQUAL" << endl;
}
else {
cout << "DIFF" << endl;
}
return 0;
}