我想重载==运算符以检查对象的不同实例是否具有相同的文本.
我已经声明了一个公共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 ) {总结
以上是内存溢出为你收集整理的C中的重载“==”运算符未被调用?全部内容,希望文章能够帮你解决C中的重载“==”运算符未被调用?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)