加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:51:07 所属栏目:百科 来源:网络整理
导读:我有一个Task类,它有一个字符串文本私有成员.我访问变量槽const string getText()const;. 我想重载==运算符以检查对象的不同实例是否具有相同的文本. 我已经声明了一个公共bool运算符==(const Task text2)const;在类头和代码上它像这样: bool Task::operato
我有一个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 ) {

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读