【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++】运算符重载 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 频次最高的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