【C++】运算符重载

2023-12-05

  1. 加号运算符重载
#include <iostream>
using namespace std;
class Person
{
public:
    // 成员函数实现运算符重载
    // Person operator+(Person &p)
    // {
    //     Person temp;
    //     temp.a = this->a + p.a;
    //     temp.b = this->b + p.b;
    //     return temp;
    // }
    int a;
    int b;
};
// 全局函数实现运算符重载
Person operator+(Person &p1, Person &p2)
{
    Person temp;
    temp.a = p2.a + p1.a;
    temp.b = p2.b + p1.b;
    return temp;
}
int main()
{
    Person p1;
    p1.a = 10;
    p1.b = 20;
    Person p2;
    p2.a = 30;
    p2.b = 40;
    Person p3 = p1 + p2;
    // 成员函数重载本质
    // Person p3 = p1.operator+(p2);
    // 全局函数重载本质
    // Person p3 = operator+(p1, p2);
    cout << p3.a << endl
         << p3.b << endl;
    return 0;
}
  1. 左移运算符重载

左移运算符只能利用全局函数重载

#include <iostream>
using namespace std;
class Person
{
    friend ostream &operator<<(ostream &cout, Person &p);
public:
    Person(int a, int b)
    {
        this->m_A = a;
        this->m_B = b;
    }
private:
    int m_A;
    int m_B;
};

// 全局函数实现左移运算符重载
ostream& operator<<(ostream& cout, Person& p) {
    cout << "a:" << p.m_A << " b:" << p.m_B;
    return cout;
}
int main()
{
    Person p1(10,20);
    cout << p1 << endl;
    return 0;
}

在这里插入图片描述

  1. 递增运算符重载
#include <iostream>
using namespace std;
class MyInteger
{
    friend ostream &operator<<(ostream &cout, MyInteger myint);

public:
    MyInteger() {
        m_Num = 0;
    }
    // 前置++
    MyInteger& operator++() {
        m_Num++;
        return *this;
    }
    // 后置++
    MyInteger operator++(int) {
        MyInteger temp = *this;
        m_Num++;
        return temp;
    }
private:
    int m_Num;
};
ostream& operator<<(ostream& cout, MyInteger myint) {
    cout << myint.m_Num;
    return cout;
}
// 前置++ 先++ 再返回
void test01()
{
    MyInteger myInt;
    cout << ++myInt << endl;
    cout << myInt << endl;
}
// 后置++ 先返回 再++
void test02()
{
    MyInteger myInt;
    cout << myInt++ << endl;
    cout << myInt << endl;
}

int main()
{
    // test01();
    test02();
    return 0;
}

在这里插入图片描述

  1. 赋值运算符重载

利用深拷贝解决浅拷贝的问题。

#include <iostream>
using namespace std;
class Person
{
public:
    Person(int age)
    {
        m_Age = new int(age);
    }
    Person &operator=(Person &p)
    {
        if (m_Age != NULL)
        {
            delete m_Age;
            m_Age = NULL;
        }
        // 深拷贝
        m_Age = new int(*p.m_Age);
        // 返回自身
        return *this;
    }
    ~Person()
    {
        if (m_Age != NULL)
        {
            delete m_Age;
            m_Age = NULL;
        }
    }
    int *m_Age;
};

int main()
{
    Person p1(18);
    Person p2(20);
    Person p3(30);
    p3 = p2 = p1; // 赋值操作
    cout << "p1的年龄为:" << *p1.m_Age << endl;
    cout << "p2的年龄为:" << *p2.m_Age << endl;
    cout << "p3的年龄为:" << *p3.m_Age << endl;
    return 0;
}

在这里插入图片描述

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

【C++】运算符重载 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 运行选定的代码生成器时出错:“未将对象引用设置到对象的实例。”错误?

    我已经尝试了所有解决方案 例如修复 VS 2013 但没有用 当您通过右键单击控制器文件夹来创建控制器并添加控制器时 然后右键单击新创建的控制器的操作并选择添加视图 当我尝试创建视图时 就会发生这种情况 它不是一个新项目 而是一个现有项目
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 频次最高的38道selenium面试题及答案

    1 selenium的原理是什么 selenium的原理涉及到3个部分 分别是 浏览器 driver 一般我们都会下载driver client 也就是我们写的代码 client其实并不知道浏览器是怎么工作的 但是driver知道 在sel
  • ssh免密登录gitee

    文章目录 一 简介 二 实现流程 1 生成公钥和私钥 2 在Gitee上创建仓库 3 GoLand的连接Gitee 4 上传 实现本机与Gitee码云之间的免密码登录 通过SSH协议 用于通过Git与远程仓库进行通信 将本地仓库推送到远程仓
  • Python中查看对象的所有属性和方法以及查看属性是否存在

    Python中查看对象的所有属性和方法以及查看属性是否存在 作者 爱编程的小金毛球球 日期 2023年12月3日 Python提供许多的内置函数和模块来帮助开发人员查看对象的所有属性 例如 dir vars dict 等 dir 函数查看对
  • 重磅签约!美团携手用友推进数智化升级

    近期 用友成功签约北京三快在线科技有限公司 美团 债权融资管理项目 此次合作 将基于用友BIP全球司库 为美团构建多层级的集团授信管控体系 实现债权融资精细化 风险防控前置化 集团管控科学化 助力美团进行科学融资决策 全面提升融资效益 高效
  • 人体姿态估计算法

    人体姿态估计算法 1 什么是人体姿态估计 2 基于经典传统和基于深度学习的方法 2 1 基于经典传统的人体姿态估计算法 2 2 基于深度学习的人体姿态估计算法 OpenPose AlphaPose RMPE
  • “微流控芯片建模与肿瘤标志物/感染性疾病细胞分析:合成生物学的新前沿“

    在微流控芯片建模应用中 实现肿瘤标志物的识别通常包括以下步骤 设计和制备微流控芯片 根据需要检测的肿瘤标志物类型和检测要求 设计和制备具有特定功能的微流控芯片 芯片上固定抗体或抗原 将与待检测肿瘤标志物特异性结合的抗体或抗原固定在芯片的特定
  • 基于PaddleSeg开发的人像抠图web api接口

    前言 基于PaddleSeg开发的人像抠图web api接口 提取官方代码 适配各种系统 通过api的接口进行访问 环境要求 1 Python3 7以上 2 源码 文章最后下载 源码结构 测试module py中添加如下代码 if name
  • 【单载波调制方案】正交时序多路复用调制:分析和低复杂度接收机设计(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文献下载
  • 开关电容转换器的合成器研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现
  • Python自动化测试之登录脚本的实现

    环境准备 前提已经安装好python pycharm 配置了对应的环境变量 1 安装selenium模块 文件 gt 设置 gt 项目 script gt python解释器 gt selenium 2 安装浏览器驱动器 以谷歌浏览器为例
  • EATON DPM-MC2通信模块

    EATON DPM MC2通信模块的产品特点包括 数据采集 能够采集电力系统或工业设备的数据 包括电流 电压 频率 功率因数等参数 以便实时监测和控制系统状态 远程监测 允许远程监测电力设备或自动化系统的性能和状态 对于远程操作 故障排除和
  • 用友与厦国会联合培训,探索智能会计时代业财融合成功模式

    在企业经营过程中 业务与财务之间的边界越来越模糊 企业的各项业务活动所形成的财务结果都会成为管理者经营决策的依据 但是很多企业财务部门与业务部门之间的断层明显 业财融合成为企业运营管理的重要发展方向 也是建设世界一流财务管理体系的重要一环
  • 对标世界一流!用友已与74家中央企业达成集团级合作!

    近年来 面对蓬勃兴起的新一轮科技革命和产业变革 国资国企贯彻落实党中央 国务院决策部署 坚持以建设世界一流企业为引领 持续深化国有企业改革 切实加大科技创新工作力度 扎实推进高质量发展 取得了阶段性的重要成效 加快推进数智化转型 发挥数据价
  • 用友BIP项目云,助力设计类项目管理高效推进

    11 1 设计类项目管理解决方案 设计是国家基础设施建设 房建建造 装备制造 武器研发 特种设备生产研发等产业链的一环 可分为工程设计 装备 设备设计 工业设计 目前国内设计行业经过几十年的发展 建设 目前已经到了整合发展和转型发展的窗口期
  • 龙芯loongarch64服务器编译安装tokenizers

    1 简介 Hugging Face 的 Tokenizers 库提供了一种快速和高效的方式来处理 即分词 自然语言文本 用于后续的机器学习模型训练和推理 这个库提供了各种各样的预训练分词器 如 BPE Byte Pair Encoding
  • BENTLY 125800-01 通讯输出接口组件

    BENTLY 125800 01 通讯输出接口组件 BENTLY 125800 01 通讯输出接口组件产品详情 Bently 125800 01 通讯模块的产品特点主要包括 机械振动监测 这种继电器模块通常用于监测旋转机械设备的振动水平 以
  • 打破卫浴行业冰山!九牧重构高端服务品牌“点线面”新秩序

    文 螳螂观察 作者 余一 说到服务 你首先会想到哪个品牌 海底捞大概率会是其中之一 一个餐饮品牌 不靠价格 口味出圈 而是凭借服务走向全球市场 古往今来或许也是头一家了 而无微不至的的服务 也成为了海底捞最突出的竞争优势 相较于产品 价格等
  • 【数据结构/C++】树和二叉树_二叉链表

    include
  • 【传输线开路和短路故障】带有集总元件的非对称传输线扩频时域反射测量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解
  • 【C++】运算符重载

    加号运算符重载 include