第十六章 类和对象——运算符重载

news2024/11/20 3:23:09

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

一、加号运算符重载

作用:实现两个自定义数据类型相加的运算

 class Person {
 public:
     Person() {};
     Person(int a, int b)
     {
         this->m_A = a;
         this->m_B = b;
     }
     //成员函数实现 + 号运算符重载
     Person operator+(const Person& p) {
         Person temp;
         temp.m_A = this->m_A + p.m_A;
         temp.m_B = this->m_B + p.m_B;
         return temp;
     }
 ​
 ​
 public:
     int m_A;
     int m_B;
 };
 ​
 //全局函数实现 + 号运算符重载
 //Person operator+(const Person& p1, const Person& p2) {
 //  Person temp(0, 0);
 //  temp.m_A = p1.m_A + p2.m_A;
 //  temp.m_B = p1.m_B + p2.m_B;
 //  return temp;
 //}
 ​
 //运算符重载 可以发生函数重载 
 Person operator+(const Person& p2, int val)  
 {
     Person temp;
     temp.m_A = p2.m_A + val;
     temp.m_B = p2.m_B + val;
     return temp;
 }
 ​
 void test() {
 ​
     Person p1(10, 10);
     Person p2(20, 20);
 ​
     //成员函数方式
     Person p3 = p2 + p1;  //相当于 p2.operaor+(p1)
     cout << "mA:" << p3.m_A << " mB:" << p3.m_B << endl;
 ​
 ​
     Person p4 = p3 + 10; //相当于 operator+(p3,10)
     cout << "mA:" << p4.m_A << " mB:" << p4.m_B << endl;
 ​
 }
 ​
 int main() {
 ​
     test();
 ​
     system("pause");
 ​
     return 0;
 }

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的

总结2:不要滥用运算符重载

二、左移运算符重载

作用:可以输出自定义数据类型

 class Person {
     friend ostream& operator<<(ostream& out, Person& p);
 ​
 public:
 ​
     Person(int a, int b)
     {
         this->m_A = a;
         this->m_B = b;
     }
 ​
     //成员函数 实现不了  p << cout 不是我们想要的效果
     //void operator<<(Person& p){
     //}
 ​
 private:
     int m_A;
     int m_B;
 };
 ​
 //全局函数实现左移重载
 //ostream对象只能有一个
 ostream& operator<<(ostream& out, Person& p) {
     out << "a:" << p.m_A << " b:" << p.m_B;
     return out;
 }
 ​
 void test() {
 ​
     Person p1(10, 20);
 ​
     cout << p1 << "hello world" << endl; //链式编程
 }
 ​
 int main() {
 ​
     test();
 ​
     system("pause");
 ​
     return 0;
 }

总结:重载左移运算符配合友元可以实现输出自定义数据类型。

三、递增运算符重载

作用: 通过重载递增运算符,实现自己的整型数据

 class MyInteger {
 ​
     friend ostream& operator<<(ostream& out, MyInteger myint);
 ​
 public:
     MyInteger() {
         m_Num = 0;
     }
     //前置++
     MyInteger& operator++() {
         //先++
         m_Num++;
         //再返回
         return *this;
     }
 ​
     //后置++
     MyInteger operator++(int) {
         //先返回
         MyInteger temp = *this; //记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++;
         m_Num++;
         return temp;
     }
 ​
 private:
     int m_Num;
 };
 ​
 ​
 ostream& operator<<(ostream& out, MyInteger myint) {
     out << myint.m_Num;
     return out;
 }
 ​
 ​
 //前置++ 先++ 再返回
 void test01() {
     MyInteger myInt;
     cout << ++myInt << endl;
     cout << myInt << endl;
 }
 ​
 //后置++ 先返回 再++
 void test02() {
 ​
     MyInteger myInt;
     cout << myInt++ << endl;
     cout << myInt << endl;
 }
 ​
 int main() {
 ​
     test01();
     //test02();
 ​
     system("pause");
 ​
     return 0;
 }

总结: 前置递增返回引用,后置递增返回值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5个适合初学者的初级网络安全工作,网络安全就业必看

前言 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级&#xff0c;对网络专业人员的需求很高&#xff0c;这并…

【异常错误】WSL2设置为全核cpu和全部内存

今天偶尔发现 WSL占用的内存是真实内存的一半&#xff08;通过htop命令查看即可&#xff09; 现在需要修改配置到使用全部的CPU资源&#xff1a; Windows R 键&#xff0c; 输入 %UserProfile% 并运行进入用户文件夹, 新建文件 .wslconfig&#xff0c;文件内容如下&#xf…

light client轻节点简介

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户&#xff0c;可选择运行全节…

【JavaEE】多线程(五)- 基础知识完结篇

多线程&#xff08;五&#xff09; 文章目录 多线程&#xff08;五&#xff09;volatile关键字保证内存可见性JMM&#xff08;Java Memory Model&#xff09; 不保证原子性 wait 和 notifywait()notify()线程饿死 上文我们主要讲了 synchronized以及线程安全的一些话题 可重入…

【Unity】3D贪吃蛇游戏制作/WebGL本地测试及项目部署

本文是Unity3D贪吃蛇游戏从制作到部署的相关细节 项目开源代码&#xff1a;https://github.com/zstar1003/3D_Snake 试玩链接&#xff1a;http://xdxsb.top/Snake_Game_3D 效果预览&#xff1a; 试玩链接中的内容会和该效果图略有不同&#xff0c;后面会详细说明。 游戏规则 …

图像分割中的色块的提取

一 色块提取方法&#xff1a; ①首先是色彩模型的转换 由RGB颜色空间转到HSV颜色空间 原因&#xff1a;RGB颜色空间适合显示系统&#xff0c;但是各分量间相关性很强&#xff0c;比如当图像亮度发生变化时&#xff0c;RGB三个分量都会发生相应改变 但是HSV颜色空间更能感知颜色…

【Java 进阶篇】JDBC 数据库连接池 C3P0 详解

数据库连接池是数据库编程中常用的一种技术&#xff0c;它可以有效地管理数据库连接&#xff0c;提高数据库访问的性能和效率。在 Java 编程中&#xff0c;有多种数据库连接池可供选择&#xff0c;其中之一就是 C3P0。本文将详细介绍 C3P0 数据库连接池的使用&#xff0c;包括原…

LabVIEW使用ZigBee无线传感器开发住宅负载电力应用

LabVIEW使用ZigBee无线传感器开发住宅负载电力应用 长期以来&#xff0c;住宅客户的需求一直是电力行业的一部分。由于公用事业需要建设基础设施以满足即时和长期需求&#xff0c;因此公用事业账单既包含能源费用&#xff0c;其中衡量客户随时间消耗的总电量&#xff0c;也包含…

网络攻击常见手段总结

网络攻击常见手段总结 IP 欺骗 IP 欺骗技术是什么&#xff1f; IP 欺骗技术就是伪造某台主机的 IP 地址的技术。通过 IP 地址的伪装使得某台主机能够伪装另外的一台主机&#xff0c;而这台主机往往具有某种特权或者被另外的主机所信任。 攻击时&#xff0c;伪造大量的 IP 地…

文件操作 和 IO - 详解

一&#xff0c;认识文件 1.1 树形结构组织和目录 文件是对于"硬盘"数据的一种抽象&#xff0c;在一台计算机上&#xff0c;有非常多的文件&#xff0c;这些文件是通过 "文件系统" 来进行组织的&#xff0c;本质上就是通过 "目录"(文件夹) 这样…

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…

第八章 排序 四、冒泡排序

目录 一、算法思想 二、例子 三、代码实现 四、验证 五、算法性能分析 注意&#xff1a;要分清楚交换次数和移动次数 六、总结 一、算法思想 从后往前&#xff0c;两两比较相邻元素的值&#xff0c;若为逆序&#xff0c;则交换它们的值&#xff0c;直到全部比较完。 二…

typescript: Builder Pattern

/*** file: CarBuilderts.ts* TypeScript 实体类 Model* Builder Pattern* 生成器是一种创建型设计模式&#xff0c; 使你能够分步骤创建复杂对象。* https://stackoverflow.com/questions/12827266/get-and-set-in-typescript* https://github.com/Microsoft/TypeScript/wiki/…

制作 3 档可调灯程序编写

PWM 0~255 可以将数据映射到0 75 150 225 尽可能均匀电压间隔

Python的NumPy库(一)基础用法

NumPy库并不是Python的标准库&#xff0c;但其在机器学习、大数据等很多领域有非常广泛的应用&#xff0c;NumPy本身就有比较多的内容&#xff0c;全部的学习可能涉及许多的内容&#xff0c;但我们在这里仅学习常见的使用&#xff0c;这些内容对于我们日常使用NumPy是足够的。 …

【Python】datetime 库

# timedelta(days, seconds, microseconds,milliseconds, minutes, hours, weeks) 默认按顺序传递参数 # 主要介绍 datetime.datetime 类 # 引入 from datetime import datetime today datetime.now() # 获取当前时间 2023-10-05 15:58:03.218651 today1 datetime.utcnow() #…

经典算法-----汉诺塔问题

前言 今天我们学习一个老经典的问题-----汉诺塔问题&#xff0c;可能在学习编程之前我们就听说过这个问题&#xff0c;那这里我们如何去通过编程的方式去解决这么一个问题呢&#xff1f;下面接着看。 汉诺塔问题 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说&#x…

Ubuntu 22.04 安装Nvidia显卡驱动、CUDA、cudnn

GPU做深度学习比CPU要快很多倍&#xff0c;用Ubuntu跑也有一定的优势&#xff0c;但是安装Nvidia驱动有很多坑 Ubuntu版本&#xff1a;22.04.3 LTS 分区&#xff1a; /boot分配 1G &#xff0c;剩下都分给根目录/ 显卡&#xff1a;GTX 1050 Ti 坑1&#xff1a;用Ubuntu自带的 …

ESP32上电到app_main()的过程梳理

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘校园大使&#xff0c;湖南区域的日常实习&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &am…

【单片机】16-LCD1602和12864和LCD9648显示器

1.LCD显示器相关背景 1.LCD简介 &#xff08;1&#xff09;显示器&#xff0c;常见显示器&#xff1a;电视&#xff0c;电脑 &#xff08;2&#xff09;LCD&#xff08;Liquid Crystal Display&#xff09;&#xff0c;液晶显示器&#xff0c;原理介绍 &#xff08;3&#xff…