国庆作业4

C++运算符重载的实现过程和代码

所有运算符重载,都拥有一个统一的名称:operator# (#表示运算符号)

参数:根据运算符本身特点决定,如果是单目运算符,最多拥有一个参数,如果是双目运算符,最多拥有两个参数,返回值由用户自己决定

调用原则:运算符的左侧是函数调用者,右侧是该函数的参数

每个运算符重载,都可以实现两个版本的重载函数,分别是成员函数版和全局函数版

成员函数版比全局函数版本少一个参数,因为类对象本身就是一个参数

全局函数版和成员函数版只能实现一个,否则会造成调用时的混乱情况

全局函数版,需要使用友元函数来完成

#include <iostream>using namespace std;//定义一个复数类 5 + 3i
class Complex
{
private:int real;         //实部int vir;          //虚部public:Complex() {}Complex(int r, int v):real(r), vir(v) {}         //有参构造//定义展示函数void show(){if(vir>=0){cout<<real<<" + "<<vir<<"i"<<endl;}else{cout<<real<<vir<<"i"<<endl;}}//全局函数版实现加运算符重载friend const Complex operator+ (const Complex &L, const Complex &R);//成员函数版实现运算符重载const  Complex  operator- ( const Complex  &R)const{Complex c;c.real = this->real - R.real;c.vir = this->vir - R.vir;return c;}//成员函数版实现关系运算符的重载:实部>实部  && 虚部>虚部bool operator>(const Complex &R)const{return this->real>R.real&&this->vir>R.vir;}//重载中括号运算符int & operator[](int index){if(index == 0){return real;          //返回实部}else if(index == 1){return vir;           //返回虚部}}//重载+=运算符:实部+=实部   虚部+=虚部Complex & operator+=(const Complex &R){this->real += R.real;this->vir += R.vir;return *this;                //返回自身的引用}//重载负号运算符: 实部= -实部, 虚部 = -虚部Complex operator-(){Complex c;c.real = -this->real;c.vir = -this->vir;return c;}//重载前置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1Complex &operator++(){++this->real;++this->vir;return *this;}//重载后置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1Complex operator++(int){Complex c;c.real = this->real++;c.vir = this->vir++;return c;}//将全局函数版实现的输出运算符重载函数设置成友元friend ostream &operator<<(ostream &L, Complex &c);//重载小括号运算符,做一个仿函数void operator()(string s){cout<<s<<endl;}//重载小括号运算符,做一个仿函数void operator()(){cout<<520<<" "<<1314<<endl;}//重写类型转换运算符operator int(){return real;         //将该数据类型向int类型转换后,使用的是real的值}};//全局函数版实现加号运算符重载:实部+实部  虚部+虚部
const Complex operator+ (const Complex &L, const Complex &R)
{//定义一个临时空间Complex c;c.real = L.real + R.real;c.vir = L.vir + R.vir;return c;
}//重载输出运算符函数
ostream &operator<<(ostream &L, Complex &c)
{if(c.vir>=0){L<<c.real<<" + "<<c.vir<<"i"<<endl;}else{L<<c.real<<c.vir<<"i"<<endl;}//返回左操作数自身的引用return L;
}int main()
{Complex c1(5,3);c1.show();                    //5+3iComplex c2(2,-1);c2.show();                      //2-1iComplex c3 = c1-c2;             //调用加法运算符重载函数  c1.operator-(c2)c3.show();                      //3+4iif(c3 > c2)              //调用关系运算符重载函数{cout<<"yes"<<endl;}else{cout<<"no"<<endl;}c3[0] = 5;               //将实部进行修改成5,调用中括号运算符重载c3.show();                  //5+4ic3 += c2;            //调用+=运算符重载函数c3.show();             //7+3iComplex c4 = -c3;      //调用-号运算符重载c4.show();              //-7 - 3ic3.show();            //7+3iComplex c5 = ++c3;          //调用前置自增运算符重载函数c5.show();                  //8+4ic3.show();                   //8+4iComplex c6 = c3++;           //调用后置自增运算符重载函数c6.show();                   //8+4ic3.show();                   //9+5icout<<c3;                //cout.operator<<(c3)c3("hello world");      //c3.operator()("hello world");c3();int num = (int)c3;            //调用类型转换运算符重载函数cout<<"num = "<<num<<endl;return 0;
}

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

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

相关文章

Java后端模拟面试,题集①

1.Spring bean的生命周期 实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction 2.Spring AOP的创建在bean的哪个时期进行的 &#xff08;图片转载自Spring Bean的完整生命周期&#xff08;带流程图&#xff0c;好记&#xff09;&#xff09; 3.MQ如…

毛玻璃用户卡交互

效果展示 页面结构组成 从效果展示可以看到&#xff0c;此效果都是比较常规的。主要的核心就是卡片的悬停效果。 CSS 知识点 backdrop-filter 回顾transitiontransform 页面基础布局实现 <section><div class"container"><div class"card&q…

第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DMA,C库和中间件处理等注意事项

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2023视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第8期&#xff0c;BSP驱动第26期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2023-10-01&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题

最近升级springboot3真是一挖一个坑&#xff0c;又给我发现了 spring-cloud-gateway 引入 openfeign 会导致循环依赖异常&#xff0c;特此记录一下这个坑 一、发现问题 网关里面有一个全局的过滤器&#xff0c;因为要查询一些配置信息&#xff0c;目前是通过 feign client 的方…

掌机小霸王,开源俄罗斯方块小游戏

俄罗斯方块试玩gi PC或手机 点开即玩: https://chvin.github.io/react-tetris/?lanzh-cn 也可以扫码开玩: 实现了数据的持久化 游戏进度的数据可以持久存储到本地浏览器, 即使刷新网页也无需重新开始游戏 小结: 俄罗斯方块属于超级经典的游戏, 感兴趣可以玩一下, 找回一点童…

【初识Linux】上

初识Linux上 一、Linux背景1.1 UNIX发展的历史1.2 UNIX发展的历史 二、开源三、官网Linux官网 四、企业应用现状五、发行版本六、 os概念&#xff0c;定位 本博客简介 初始Linux操作系统初识shell命令 ,了解若干背景知识。使用常用Linux命令了解Linux权限概念与思想,能深度理解…

AMD GPU 内核驱动分析(三)-dma-fence 同步工作模型

在Linux Kernel 的AMDGPU驱动实现中&#xff0c;dma-fence扮演着重要角色&#xff0c;AMDGPU的Render/解码操作可能涉及到多个方面同时引用buffer的情况&#xff0c;以渲染/视频解码场景为例&#xff0c;应用将渲染/解码命令写入和GPU共享的BUFFER之后&#xff0c;需要将任务提…

海外媒体发稿:商务视频推广销售利器之完全指南

在当今数字化时代&#xff0c;商务视频推广已经成为了企业获取市场份额和提升销售业绩的重要手段。视频作为一种视听媒体&#xff0c;拥有更强大的感染力和传达信息的能力&#xff0c;因此在各种销售场景中得到了广泛应用。本文为大家提供了一份完全指南&#xff0c;帮助你了解…

代码随想录Day9 栈与队列 LeetCodeT20 有效的括号 T1047 删除字符串中所有相邻重复项 T150 逆波兰表达式求值

题目详细思路和解法来自于:代码随想录 (programmercarl.com) LeetCode T20 有效的括号 题目思路 这道题分为三种情况 1.左括号多了 ([{}]() 2.括号不匹配 [{(]}] 3.右括号多了 []{}()))) 处理思路:我们在遇到左括号的时候,直接入栈其对应的右括号即可…

【Java】微服务——微服务介绍和Eureka注册中心

目录 1.微服务介绍2.服务拆分和远程调用2.1.提供者与消费者 3.Eureka注册中心3.1.Eureka的结构和作用3.2.Eureka的结构3.3.搭建Eureka服务3.3.1.引入eureka依赖3.3.2.编写配置文件 3.4.服务注册及拉1&#xff09;引入依赖2&#xff09;配置文件3&#xff09;启动多个user-servi…

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】

目录 了解相关的函数 第一种做法&#xff1a;自定义添加选择资产的前缀或后缀 代码 效果 第二种做法&#xff1a;通过映射来获取资产类型添加前缀和修改前缀 映射代码 代码 效果 在之前一章中&#xff0c;我们创建了插件&#xff0c;用来扩展编辑器的使用&#xff1a; …

【高阶数据结构】哈希(哈希表、哈希桶)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

微服务技术栈-认识微服务和第一个微服务Demo

文章目录 前言一、认识微服务二、微服务技术栈三、Eureka注册中心四、微服务DEMO1、搭建eureka-server2、服务注册和服务发现 总结 前言 随着业务的不断复杂&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 本章就从微服…

VD6283TX环境光传感器驱动开发(1)----获取ID

VD6283TX环境光传感器驱动开发----1.获取ID 概述视频教学样品申请源码下载模块参数IIC接线方式设备ID生成STM32CUBEMX串口配置 IIC配置串口重定向模块地址获取ID主函数结果演示 概述 环境光传感器是一种光电探测器&#xff0c;能够将光转换为电压或者电流&#xff0c;使用多光…

计算机网络常见面试题

梳理计算机网络相关的面试题&#xff0c;相关知识结构主要参考谢希仁老师的《计算机网络&#xff08;第五版&#xff09;》一书&#xff0c;并整理互联网上常见面试题。 计算机网络性能指标 性能指标从不同的方面来度量计算机网络的性能。下面介绍常用的七个性能指标。 1、速…

23-properties文件和xml文件以及dom4j的基本使用操作

特殊文件 我们利用这些特殊文件来存放我们 java 中的数据信息&#xff0c;当数据量比较大的时候&#xff0c;我们可以利用这个文件对数据进行快速的赋值 对于多个用户数据的存储的时候我们要用这个XML来进行存储 关于这些特殊文件&#xff0c;我们主要学什么 了解他们的特点&…

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…

【前段基础入门之】=>CSS浮动

浮动的简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 &#x1f922; 脱离文档流。&#x1f60a; 不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽…

GRACE-FO L2产品的发布说明 - 版本UTCSR RL-06.1产品

数据更新日期&#xff1a;2023-5-11 0&#xff09;此说明取代了所有先前与UTCSR-RL06.1 GRACE-FO Level-2产品相关的旧版本发布说明。 1&#xff09;截止到本发布说明日期的GRACE-FO RL-06.1产品文件列表如下&#xff1a; 2&#xff09;通常情况下&#xff0c;每个日历月有四…