【C++】类和对象-C++运算符重载

运算符重载

在这里插入图片描述

1.加号运算符重载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码:

#include <iostream>
using namespace std;
/******************************************/
//加号运算符重载class Person
{
public:int m_A;int m_B;//1、成员函数重载+号(不能与下面方式2同时存在,否则代码报错)//Person operator+(Person& p) {//	Person temp;//	temp.m_A = this->m_A + p.m_A;//	temp.m_B = this->m_B + p.m_B;//	return temp;//}Person operator+(int num) {Person temp;temp.m_A = this->m_A + num;temp.m_B = this->m_B + num;return temp;}
};//2、全局函数重载+号(不能与上面方式1同时存在,否则代码报错)
Person operator+(Person& p1, Person& p2) {Person temp;temp.m_A = p1.m_A + p2.m_A;temp.m_B = p1.m_B + p2.m_B;return temp;
}
//Person operator+(Person& p1, int num) {
//	Person temp;
//	temp.m_A = p1.m_A + num;
//	temp.m_B = p1.m_B + num;
//	return temp;
//}void test01() {Person p1;p1.m_A = 10;p1.m_B = 10;Person p2;p2.m_A = 10;p2.m_B = 10;//成员函数重载本质调用//Person p3 = p1.operator+(p2);//全局函数重载本质调用//Person p3 = operator+(p1, p2);Person p3 = p1 + p2;//运算符重载 ,函数也可以发生重载Person p4 = p1 + 100;//Person + intcout << "p3.m_A = " << p3.m_A << endl;cout << "p3.m_B = " << p3.m_B << endl;cout << "p4.m_A = " << p4.m_A << endl;cout << "p4.m_B = " << p4.m_B << endl;
}/******************************************/
int main()
{/******************************************/test01();/******************************************/system("pause");return 0;
}

结果
在这里插入图片描述

2.左移运算符重载

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
代码:

#include <iostream>
using namespace std;
/******************************************/
//左移运算符重载
class Person {friend ostream& operator<<(ostream& cout, Person& p);
public:Person(int a, int b) {m_A = a;m_B = b;}//利用成员函数重载 左移运算符 p.operator<<(cout) 简化版本 p << cout//不会利用成员函数重载<<运算符, 因为无法实现cout在左侧//void operator<<( cout ) {//}
private:int m_A;int m_B;
};//只能利用全局函数重载左移运算符
//ostream对象只能有一个!!!
ostream& operator<<(ostream& cout, Person& p) {  //本质 operator<< (cout, p) 简化 cout << pcout << "m_A = " << p.m_A << " m_B = " << p.m_B;return cout; //ostream& 加上了& 就是进行了cout引用
}void test01() {Person p(10, 10);//p.m_A = 10;//p.m_B = 10;cout << p << "hello" << endl;//链式编程
}/******************************************/
int main()
{/******************************************/test01();/******************************************/system("pause");return 0;
}

3.递增运算符重载

在这里插入图片描述
在这里插入图片描述
递增++代码:

#include <iostream>
using namespace std;
/******************************************/
//递增运算符重载//自定义整型
class MyInteger {friend ostream& operator<<(ostream& cout, MyInteger& myint);//前置++运算符//friend ostream& operator<<(ostream& cout, MyInteger  myint);//后置++运算符public:MyInteger() {m_Num = 0;}//重载前置++运算符 返回引用为了一直对一个数据进行递增操作MyInteger& operator++() {//先进行++运算m_Num++;//再将自身做返回return *this;}//重载后置++运算符//MyInteger operator++(int) int代表占位参数,可以用于区分前置和后置递增MyInteger operator++(int) {MyInteger temp = *this;//先返回自身结果m_Num++;//再进行++运算return temp;}private:int m_Num;
};//重载<<运算符 , 前置++运算符
ostream& operator<<(ostream& cout, MyInteger& myint) {cout << "myint输出: " << myint.m_Num;return cout;
}重载<<运算符 , 后置++运算符
//ostream& operator<<(ostream& cout, MyInteger myint) {
//	cout << "myint输出: " << 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();/******************************************/system("pause");return 0;
}

递减–代码:

#include <iostream>
using namespace std;
/******************************************/
//递增运算符重载//自定义整型
class MyInteger {//friend ostream& operator<<(ostream& cout, MyInteger& myint);friend ostream& operator<<(ostream& cout, MyInteger myint);public:MyInteger() {m_Num = 2;}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;
//}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();/******************************************/system("pause");return 0;
}

4.赋值运算符重载

在这里插入图片描述
在这里插入图片描述
代码:

#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 = p.m_Age;//提供深拷贝 解决浅拷贝的问题m_Age = new int(*p.m_Age);//返回本身return *this;}~Person() {if (m_Age != NULL) {delete m_Age;m_Age = NULL;}}//年龄的指针int* m_Age;
};void test01() {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;
}
/******************************************/
int main()
{/******************************************/test01();//test02();/******************************************/system("pause");return 0;
}

结果:
在这里插入图片描述

5.关系运算符重载

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;
/******************************************/
//关系运算符重载
class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}bool operator==(Person& p) {if (m_Name == p.m_Name && m_Age == p.m_Age) {return true;}else {return false;}}bool operator!=(Person& p) {if (m_Name == p.m_Name && m_Age == p.m_Age) {return false;}else {return true;}}private:string m_Name;int m_Age;
};void test01() {Person p1("tom", 18);Person p2("tom", 18);if (p1 == p2) {cout << "p1和p2相等  " << endl;}else {cout << "p1和p2不相等" << endl;}if (p1 != p2) {cout << "p1和p2不相等  " << endl;}else {cout << "p1和p2相等" << endl;}
}void test02();/******************************************/
int main()
{/******************************************/test01();test02();/******************************************/system("pause");return 0;
}void test02() {Person p1("jack", 18);Person p2("tom", 18);if (p1 == p2) {cout << "p1和p2相等  " << endl;}else {cout << "p1和p2不相等" << endl;}if (p1 != p2) {cout << "p1和p2不相等  " << endl;}else {cout << "p1和p2相等" << endl;}
}

6.函数调用运算符重载

在这里插入图片描述
代码

#include <iostream>
using namespace std;
/******************************************/
//函数调用运算符重载
class MyPrint {
public:void operator()(string test) {cout << "print:" << test << endl;}
};void test01() {//重载()操作符 也称为仿函数MyPrint myPrint;myPrint("hello");//匿名对象调用MyPrint()("匿名对象调用");
}class Add {
public:int operator()(int num1, int num2) {return num1 + num2;}
};void test02() {Add add;cout << add(10, 20) << endl;//匿名对象调用cout << Add()(10, 20) << endl;
}/******************************************/
int main()
{/******************************************/test01();test02();/******************************************/system("pause");return 0;
}

结果
在这里插入图片描述

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

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

相关文章

flag{网鼎杯之java代码审计入门} - file-in-java[ctf]

一、赛题截图 二、接口测试 我们先上传文件抓包&#xff0c;发送到repeter 响应如下 我们使用下载接口去下载一个不存在的文件&#xff0c;回显“资源被删除” - 说明系统可能去查找了这个文件&#xff0c;那我们能不能去下载/etc/passwd文件&#xff0c;但是还不知道相对…

【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

程序设计 算法基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

纯JS+Vue实现一个仪表盘

在使用canvas的时候发现数值变化&#xff0c;每次都要重新渲染&#xff0c;值都从0开始&#xff0c;这和我的需求冲突。 1. 先绘制基本的圆环背景&#xff0c;利用border-color和border-radius将正方形变成基本的圆环。 <div class"circle"><div class&qu…

vue3如何封装框架

在Vue 3中&#xff0c;你可以通过创建一个基础的框架来封装一些常用的功能、组件和样式&#xff0c;以便在不同的项目中重复使用。下面是一个简单的步骤来封装一个Vue 3框架&#xff1a; 创建一个新的Vue项目&#xff1a;首先&#xff0c;使用Vue CLI创建一个新的Vue项目。 v…

试试这三款音频转换格式软件,看看可不可以转换mp3?

你是不是不知道音频转换格式有什么用呢&#xff1f;为什么要音频转换呢&#xff1f; 其实音频转换格式的原因是&#xff1a; ①兼容性问题&#xff1a;不同的设备支持不同的音频格式&#xff0c;如果你想在不同设备之间共享音频文件的话&#xff0c;那么需要将文件转换另一种…

CSDN如何输入公式

方法分三步&#xff1a; 1&#xff09;预先设置MathType的复制剪切选项 2&#xff09;将MathType已经编写好的公式复制到CSDN 3&#xff09;把复制的公式文本&#xff0c;首尾的“\[”和“\]”符号替换成“$$”和“$$” 1&#xff09;预先设置MathType的复制剪切选项 2&#x…

java实现文件下载

1.文件上传 文件上传&#xff0c;也称为upload&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发微博、发微信朋友圈都用到了文件上传功能。 import com.itheima.…

打印Winfrom控件实现简陋版的打印(C#)

本文在前面写的博文基础上进行修改&#xff1a;利用Graphics的CopyFromScreen实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客 通过截图的方式进行打印在前面的文章后面已经介绍过&#xff0c;有问题。 UI布局如下&#xff1a; 代码如下&#xff1a; using System; using…

使用Jetpack Compose和Motion Layout创建交互式UI

使用Jetpack Compose和Motion Layout创建交互式UI 通过阅读本博客&#xff0c;您将学会使用Motion Layout实现这种精致的动画效果&#xff1a; 让我们从简单的介绍开始。 介绍 作为Android开发者&#xff0c;您可能会遇到需要布局动画的情况&#xff0c;有时甚至需要变形样…

具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)

6 实验 实验目的是验证以下几个问题: RT-1可以学习大规模指令数据&#xff0c;并且可以在新任务、对象和环境上实现zero-shot的泛化能力&#xff1f;训练好的模型可以进一步混合多种其他数据&#xff08;比如仿真数据和来自其他机器人的数据&#xff09;吗&#xff1f;多种方…

远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制

目录 一、前言 二、远程控制中的安全威胁 三、国内外远控软件安全机制 【ToDesk】 【RayLink】 【Teamviewer】 【Splashtop】 四、安全远控预防 一、前言 近期&#xff0c;远程控制话题再一次引起关注。 据相关新闻报道&#xff0c;不少不法分子利用远程控制软件实施网络诈骗&…

灵雀云Alauda MLOps 现已支持 Meta LLaMA 2 全系列模型

在人工智能和机器学习领域&#xff0c;语言模型的发展一直是企业关注的焦点。然而&#xff0c;由于硬件成本和资源需求的挑战&#xff0c;许多企业在应用大模型时仍然面临着一定的困难。为了帮助企业更好地应对上述挑战&#xff0c;灵雀云于近日宣布&#xff0c;企业可通过Alau…

HTSA101伺服流量阀放大器

电液伺服阀放大器HTSA101特点&#xff1a; 可用拨码方式选择比例、积分(PI)控制前面板有电源、阀电流和继电器指示灯可开关选择阀电流的输出电流范围可选输出电流或者电压信号来匹配伺服阀或者比例阀采用标准 DIN rail 规格带有颤振信号、颤振信号的幅值和频率可调标准的DIN 导…

Qt应用开发(基础篇)——布局管理Layout Management

目录 一、前言 二&#xff1a;相关类 三、水平、垂直、网格和表单布局 四、尺寸策略 一、前言 在实际项目开发中&#xff0c;经常需要使用到布局&#xff0c;让控件自动排列&#xff0c;不仅节省控件还易于管控。Qt布局系统提供了一种简单而强大的方式来自动布局小部件中的…

Windows驱动开发

开发Windows驱动程序时&#xff0c;debug比较困难&#xff0c;并且程序容易导致系统崩溃&#xff0c;这时可以使用Virtual Box进行程序调试&#xff0c;用WinDbg在主机上进行调试。 需要使用的工具&#xff1a; Virtual Box&#xff1a;用于安装虚拟机系统&#xff0c;用于运…

Github Copilot在JetBrains软件中登录Github失败的解决方案

背景 我在成功通过了Github Copilot的学生认证之后&#xff0c;在VS Code和PyCharm中安装了Github Copilot插件&#xff0c;但在PyCharm中插件出现了问题&#xff0c;在登录Github时会一直Retrieving Github Device Code&#xff0c;最终登录失败。 我尝试了网上修改DNS&…

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

1、接口及协议 通信接口&#xff1a;RS485 数据位&#xff1a;8个 奇偶校验位&#xff1a;无 停止位&#xff1a;1个 波特率&#xff1a;9600 输出编码格式&#xff1a;ModbusRTU 2、设备组态 添加新设备&#xff08;PLC&#xff09;->设备和网络管理->点击PLC-&…

音频转文字软件免费版让你快速完成转换

音频转文字技术是一种将音频文件转换为文本形式的技术&#xff0c;它可以帮助人们更方便地获取和处理音频信息。在实际生活和工作中&#xff0c;我们可能会遇到需要将音频转换为文字的情况&#xff0c;比如听取会议录音、收听讲座、学习外语等等。那么&#xff0c;你知道音频转…