C中的重载“==”运算符未被调用?
发布时间:2020-12-16 10:51:07 所属栏目:百科 来源:网络整理
导读:我有一个Task类,它有一个字符串文本私有成员.我访问变量槽const string getText()const;. 我想重载==运算符以检查对象的不同实例是否具有相同的文本. 我已经声明了一个公共bool运算符==(const Task text2)const;在类头和代码上它像这样: bool Task::operato
我有一个Task类,它有一个字符串文本私有成员.我访问变量槽const string getText()const;.
我想重载==运算符以检查对象的不同实例是否具有相同的文本. 我已经声明了一个公共bool运算符==(const Task text2)const;在类头和代码上它像这样: bool Task::operator==( const Task text2 ) const { return strcmp( text.c_str(),text2.getText().c_str() ) == 0; } 但即使字符串相等,它总是返回false. 所以我在bool运算符==(const Task text2)const中添加了一个cout调用;检查它是否被调用,但一无所获. 似乎我的自定义==运算符永远不会被调用. 我的标题: #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; } 解决方法Task *t = new Task("Second task"); Task *t2 = new Task("Second task"); // ... if( t == t2 ) { 您不是在比较Task对象,而是指向Task对象的指针.指针比较对于语言是本机的,并且比较对象的标识(即,仅当两个指针指向同一对象或两者都为空时才会产生真). 如果要比较需要取消引用指针的对象: if( *t == *t2 ) { (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |