I have a Task class wich has a string text
private member. I access the variable trough const string getText() const;
.
I want to overload the ==
operator to check if differents instances of the object have the same text.
I've declared a public bool operator==( const Task text2 ) const;
on the class header and code it like this:
bool Task::operator==( const Task text2 ) const {
return strcmp( text.c_str(), text2.getText().c_str() ) == 0;
}
But it was always returning false even when the strings where equal.
So I added a cout call within the bool operator==( const Task text2 ) const;
to check if it was being called, but got nothing.
It seems that my custom ==
operator is never being called.
My header:
#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
Edited the overload operation to use a reference, and got away from strcmp:
bool Task::operator==( const Task &text2 ) const {
return this->text == text2.getText();
}
Main file:
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;
}