比较指针时不会调用重载的“==”运算符

2023-12-10

我有一个任务类,其中有一个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;
}

Task *t = new Task("Second task");
Task *t2 = new Task("Second task");
// ...
if( t == t2 ) {

你不是在比较Task对象,但指向Task对象。指针比较是该语言的本机比较identity对象的(即会产生true仅当两个指针引用同一个对象或均为 null 时)。

如果你想比较对象,你需要取消引用指针:

if( *t == *t2 ) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较指针时不会调用重载的“==”运算符 的相关文章

随机推荐

  • Flask 会话过期时调用函数

    在我的 Flask 应用程序中 我正在保存与用户相对应的文件 并希望在用户的 会话 过期时删除这些文件 是否可以检测会话过期并立即调用函数 遇到了同样的问题 并没有通过使用内置的永久会话过期功能来解决它 而是将我自己的密钥添加到会话中并在每
  • 一旦开始,如何停止intent.ACTION_CALL?

    我在用Intent intent new Intent Intent ACTION CALL 从我的应用程序拨打电话 有什么办法可以在一段时间后终止通话吗 或者在ACTION CALL开始之前设置一个计时器 我正在使用 Prasanta 博
  • Emacs 击键表示混乱

    我通常在 emacs 中使用定义新的键绑定 C x gt command kmacro start macro C x gt kmacro end macro name last kbd macro insert kbd macro But
  • 在 C# 中合并两个对象

    我有一个对象模型MyObject具有各种属性 在某一时刻 我有两个这样的实例MyObject 实例 A 和实例 B 如果实例 B 具有非空值 我想复制实例 A 中的属性并将其替换为实例 B 的属性 如果我只有 1 个具有 3 个属性的类 没
  • android.R.id.empty 在 Xoom/Honeycomb 中损坏?

    我一直在尝试制作没有切换点的单选按钮 我通过这样做取得了成功 myRadioButton setButtonDrawable android R id empty 这在 Honeycomb 3 0 x 之前的所有设备中都可以正常工作 当我尝
  • 如何访问 Swift 中闭包内的变量?

    我是 Swift 新手 我正在尝试从这个函数中获取结果 我不知道如何访问从闭包外部传递给 sendAsynchronousRequest 函数的闭包内部的变量 我已经阅读了 Apple Swift 指南中有关闭包的章节 但没有找到答案 并且
  • Node Docker 运行,但看不到应用程序

    我的 Hapi 应用程序似乎正在 Docker 容器中运行 但我无法在浏览器中访问它 我以为docker run d p 8080 3000本来会这么做的 但我想不会 我正在运行 boot to docker 但两者都没有http loca
  • 异步/等待多核

    async await 是否应该与线程一起使用以利用多核 我不完全理解 async await 但看起来它不会创建新线程并且不使用线程池 因此它在当前线程上运行代码 这意味着不支持多核 async await与跨多个核心的负载平衡工作无关
  • ASP.NET Core RC2 和 .NET 4.5.1 应用程序之间的共享 cookie 身份验证

    我们有两个运行共享 cookie 身份验证的 NET 应用程序 一个是 ASP NET Core RC1 应用程序 另一个是经典的 NET 4 5 1 应用程序 目前这是使用过时的设置Microsoft Owin Security Cook
  • 单击 Gmail 中的链接是否会发送引用标头?

    这主要是出于隐私考虑 如果我在 Gmail 或任何其他电子邮件提供商 上打开一封包含网站链接的电子邮件 并且最终点击该链接 Gmail 是否会发送引用标头 即 目标网站会知道我来自 Gmail 他们会知道我点击链接时使用的电子邮件地址吗 最
  • JPanel 内部的半透明组件

    我有从 JPanel 扩展的类 MyPanel MyPanel 类有一个包含图标的 JLabel 组件 我的问题是如何绘制 渲染此 JLabel 组件以在 MyPanel 类中获得半透明效果 通过图标查看 而不是创建 xxxJLabel 扩
  • 将锚标记中的图像居中

    我的锚标记中有一张图像 我需要将其居中 我已经成功地使用了我刚刚在 DOM 检查器中遇到的这项技术来做到这一点 http jsfiddle net m6e3m it uses display table margin 0 auto 我尝试使
  • 设置SQLite v3数据库的密码

    我的应用程序使用存储在可通过网络获取的文件中的数据库 到目前为止 我一直在使用MS Access文件 accdb 但我正在尝试迁移到SQLite 版本 3 db3 我将 SQLite NuGet 包添加到我的项目中并使用创建了 SQLite
  • 如何让nbviewer显示本地文件?

    我已经安装了 nbviewer 并且可以工作 我看到它有一个 localfiles带有文件夹名称的选项 它说 在 home gb S14 inclass 中为本地笔记本提供服务 这可能存在安全风险 但我无法弄清楚 URL 格式让它在那里查找
  • 从表单中删除空输入元素

    我有一个简单的表单 可以继续创建 codeigniter 的所有表单和验证要求 我想要做的是在序列化之前过滤掉任何空输入 这样我就不会创建表单输入和表单验证集规则 我不知道该怎么做 Jquery 中出现警报的地方是我想要删除任何空输入的地方
  • 在 scala 控制台中打开和关闭 JavaFx 应用程序

    这是一个例子 Copyright 2013 ScalaFX Project All right reserved package scalafx ensemble example charts import scalafx applicat
  • 为什么 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)

    下面的代码无法启动文档 我收到错误 193 1 不是有效的 Win32 应用程序 启动可执行文件工作正常 这些文件已正确关联 双击时会启动相应的应用程序 我已经在 SO 和其他地方搜索了错误消息 createprocess 内容等 例如为什
  • HTML 仍然用 读取 php 代码

    我有以下问题 我在页面中使用了以下代码来忽略一些 php 代码 但似乎感恩节周末有更新 并且不再忽略代码 其余的 html 代码将被忽略
  • 禁用 JOptionPane.dialog 上的“确定”按钮,直到用户提供输入

    我需要用户输入名称 并且我想禁用 确定 按钮 直到给出一些输入 我怎样才能禁用它 JOptionPane允许您提供一个组件作为消息窗格以及可以在其上显示的控件 选项 如果将正确的侦听器添加到消息组件 那么您应该能够影响用作选项的控件 看一眼
  • 比较指针时不会调用重载的“==”运算符

    我有一个任务类 其中有一个string text私人会员 我访问变量槽const string getText const 我想要超载 运算符检查对象的不同实例是否具有相同的文本 我已宣布公开bool operator const Task