我有一个任务类,其中有一个string text
私人会员。我访问变量槽const string getText() const;
.
我想要超载==
运算符检查对象的不同实例是否具有相同的文本。
我已宣布公开bool operator==( const Task text2 ) const;
在类标题上并按如下方式编码:
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;
}