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;
}