gpt4 book ai didi

c++ - C++ 中的重载 "=="运算符未被调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:26:39 25 4
gpt4 key购买 nike

我有一个 Task 类,它有一个 string text 私有(private)成员。我通过 const string getText() const; 访问变量。

我想重载 == 运算符来检查对象的不同实例是否具有相同的文本。

我在类头上声明了一个 public bool operator==( const Task text2 ) const; 并像这样编码:

bool Task::operator==( const Task text2 ) const {
return strcmp( text.c_str(), text2.getText().c_str() ) == 0;
}

但即使字符串相等,它也总是返回 false。

所以我在 bool operator==( 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 对象的指针。指针比较是语言固有的,比较对象的身份(即只有当两个指针指向同一个对象或两者都为空时才会产生true)。

如果你想比较你需要解引用指针的对象:

if( *t == *t2 ) {

关于c++ - C++ 中的重载 "=="运算符未被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com