C中的重载“==”运算符未被调用?

C中的重载“==”运算符未被调用?,第1张

概述我有一个Task类,它有一个字符串文本私有成员.我访问变量槽const string getText()const;. 我想重载==运算符以检查对象的不同实例是否具有相同的文本. 我已经声明了一个公共bool运算符==(const Task text2)const;在类头和代码上它像这样: bool Task::operator==( const Task text2 ) const { 我有一个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 ) {
总结

以上是内存溢出为你收集整理的C中的重载“==”运算符未被调用?全部内容,希望文章能够帮你解决C中的重载“==”运算符未被调用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存