• C++之operator=与operator==用法区别(二百一十八)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:理解C++之operator=与operator==用法区别。

    <1>.在C++中,“operator==” 和 “operator=” 是两个不同的操作符的重载形式。

    • operator==用于比较两个对象是否相等的操作符。它通常在自定义的类中进行重载,以便比较对象的成员变量是否相等。需要注意的是,默认情况下,它执行的是浅层比较,即仅比较对象的指针值。如果你想要深层比较,需要重载该操作符来比较对象的每个成员变量。

    • operator=:``赋值操作符,用于将一个对象的值赋给另一个对象。它通常在自定义的类中进行重载,以便在对象之间进行赋值操作时执行自定义的赋值逻辑。通过重载赋值操作符,可以确保在对象赋值时进行深层复制,而不仅仅是简单的指针复制。

    2.应用实例

    <1>.operator==操作符重载实现

    class Item {
    public:
        int value;
        
        bool operator==(const Item& other) const {
            return value == other.value; // 使用成员变量进行比较
        }
    };
    
    int main() {
        Item item1;
        item1.value = 10;
        
        Item item2;
        item2.value = 10;
        
        if(item1 == item2) {
            std::cout << "Items are equal" << std::endl;
        } else {
            std::cout << "Items are not equal" << std::endl;
        }
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    <2>.operator=操作符重载实现

    class Prop {
    public:
        int value;
        
        Prop& operator=(const Prop& other) {
            if (this != &other) {
                value = other.value; // 复制成员变量的值
            }
            return *this;
        }
    };
    
    int main() {
        Prop prop1;
        prop1.value = 10;
        
        Prop prop2;
        prop2.value = 20;
        
        prop2 = prop1; // 调用operator=函数,将prop1的值赋给prop2
        
        std::cout << "prop2.value: " << prop2.value << std::endl; // 输出:10
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    运维技术linux、nginx
    离线安装Redis集群(redis-6.2.4)
    ubuntu18.04下安装OpenRoad
    ChatGPT、New Bing、文心一言、通义千问等 AI 工具到底哪个更AI? - 第二期
    BACnet /IP转MQTT网关
    DeFi明斯基时刻:压力测试与启示
    cloudreve配置ssl证书实现https访问cloudreve网盘
    Discuz 安装全流程 CentOS+Docker+PHP+Nginx+Mariadb
    mvn deploy tongweb-embed-7.0.E.5_P3 依赖上传
    STM32项目分享---MQTT智能门禁系统(含APP控制)
  • 原文地址:https://blog.csdn.net/u010164190/article/details/132913277