当前位置: 首页 > news >正文

C++多态性——(5)运算符重载(第二节)

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
身先才能率人,律己才能服人!

一起加油!

目录

一、运算符重载规则:

二、运算符重载为成员函数: 

例:复数类乘法运算重载为类的成员函数 。

说明:

 三、运算符重载为友元函数:

例:运算符重载为类的友元函数,实数与复数的加减运算。 


一、运算符重载规则:

        运算符重载规则说明如下。

  •         (1)运算符重载的实质是函数重载,可以对大部分的运算符进行重载,这是 C++的重要特C++编译器根据参数个数和类型来决定调用哪个函数重载,同一个运算符可以定义几个运算符重载函数来进行不同的操作。运算符重载返回类型可以是任意的,通常与操作数类型相同。
  •         (2)重载后的运算符所做的操作要尽量保持原来的意义,否则会降低程序的可读性。
  •         (3)C++中,用户不能定义新的运算符,只能对已有的运算符进行重载。有六个运算符不能重载:成员访问运算符“.”,成员指针运算符“->”和“*”,作用域运算符“::”,sizeof运算符和三目运算符“?:”
  •         (4)重载运算符与预定义运算符的使用方法完全相同,它不能改变原来运算符的参数个数也不能改变其优先级。


        实现运算符重载是通过 operator 关键字实现的,运算符重载一般可以通过类的成员函数和类的友元函数来实现。

二、运算符重载为成员函数: 

        运算符重载为类的成员函数后,作为类的成员函数它可以任意访间类中的私有成员。在实际使用时,类中的成员函数总是通过该类的对象来访问的,如果是双目运算符,左操作数一定是访问成员函数的对象本身,另一个操作数通过运算符重载函数的参数表来传递;如果是单目运算符,操作数就是访问成员函数的对象本身,不需要再传递任何参数。

例:复数类乘法运算重载为类的成员函数 。

#include<iostream>
using namespace std;
class complex{private://私有接口 double real,image;public://公有接口 complex(double r=0.0,double i=0.0):real(r),image(i){ 	}~complex(){ 	}complex operator*(const complex& c)const;//定义两个复数乘法运算 complex operator*(const double& c)const;//定义复数与实数的乘法运算 void print()const; 
}; 
void complex::print()const
{cout<<"("<<real<<","<<image<<")"<<endl;
}
complex complex::operator*(const complex& c)const
{return complex(real*c.real-image*c.image,real*c.image+image*c.real);
}
complex complex::operator*(const double& c)const
{return complex(real*c,image*c);
}
int main()
{complex c1(3,4),c2(7,8),c3;c3=c2*c1;cout<<"c2:";c2.print();cout<<"c1";c1.print();cout<<"c2*c1";c3.print();c3=c2*5.0;cout<<"c2*5.0";c3.print();return 0;
}

说明:

        在本例中将复数的乘法重载为复数类的成员函数,由于复数可以与另一个复数进行乘法运算,也可以和另一个实数进行乘法运算,因此这里重载了两种形式。运算符重载为成员函数,除函数名称必须使用 operator<运算符>之外,其他与普通成员函数没有什么区别。在使用时可以采用成员函数调用的方式,也可以采用直接通过运算符对复杂操作数操作的方式。重载后的运算符原有的功能不受影响。因此,相同的运算符作用于不同的对象,就会导致不同的操作行为,从而体现了C++的多态性。 

 三、运算符重载为友元函数:

        友元函数是类的“朋友”,它可以自由地访问类的所有成员。与重载为类的成员函数不同当运算符重载为类的友元函数时,由于友元是外部函数,不存在对象调用它,因此运算符所需要的操作数都需要通过函数的形参来传递,形参参数表中参数从左至右的顺序就是运算符操作数的顺序。

例:运算符重载为类的友元函数,实数与复数的加减运算。 

#include<iostream> 
using namespace std;
class complex{
private:double real,image;
public:complex(double r=0.0,double i=0.0):real(r),image(i){ }~complex(){ };friend complex operator+ (double c1, const complex & c2);friend complex operator-(double c1,const complex & c2);void print()const;
};
void complex::print()const
{cout<<"("<<real<<","<<image<<")"<<endl;
}
complex operator+ (double c1,const complex & c2)
{return complex(c1+c2.real, c2.image);
}complex operator- (double cl,const complex & c2)
{return complex(cl-c2.real,-c2.image);
}
int main()
{complex c1(3,4),c2;c2=4+c1;cout<<"4+";c1.print();cout<<"结果为:";		c2.print();c2=4-c1;cout<<"4-";c1.print();cout<<"结果为:";c2.print();return 0;
}

        运算符重载的一般规律有如下几点。

  •         (1)运算符既可以重载为类的成员函数,也可以重载为类的友元函数。
  •         (2)对于双目运算符,重载为类的成员运算符函数,有一个参数,重载为类的友元运算符函数带有两个参数;对于单目运算符,重载为成员运算符函数不带参数,重载为类的友元运算符数带有一个参数。
  •         (3)目运算符一般可以被重载为友元运算符函数或成员运算符函数,如果第一个操作数是基本数据类型则必须使用友元:=、( )、[ ],只能重载为类的成员函数;+=、-+、/=、!=、~=、%=、>=、<= 建议重载为成员函数;其他双目运算符建议重载为友元函数。  

        以上就是我对C++多态性——(5)运算符重载(第二节)的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++多态性的理解,请持续关注我哦!!! 

相关文章:

C++多态性——(5)运算符重载(第二节)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 身先才能率人&#xff0c;律己才能服人…...

ES -极客学习

Elasticsearch 简介及其发展历史 起源 Lucene 于 Java 语言开发的搜索引擎库类创建于 1999 年&#xff0c;2005 年成为 Apache 顶级开源项目Lucene 具有高性能、易扩展的优点Lucene 的局限性 只能基于 Java 语言开发类库的接口学习曲线陡峭原生并不支持水平扩展原生并不支持水…...

【大厂秘籍】系列 - Java多线程面试题

Java多线程面试题 友情提示&#xff0c;看完此文&#xff0c;在Java多线程这块&#xff0c;基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位 线程是进程的子集&#xff0c;一个进程可以有很多线程&#xff0c;每条线…...

vue实现画笔回放,canvas转视频播放功能

示例图&#xff1a; 一、vue2版本 <template><div class"canvas-video"><canvasref"myCanvasByVideo"class"myCanvas"id"myCanvasByVideo":width"width":height"height"></canvas><d…...

Docker中镜像的相关操作

1.辅助操作 docker version&#xff1a;用查看docker客户端引擎和server端引擎版本信息。 docker info&#xff1a;用来查看docker引擎的详细信息。 docker --help&#xff1a;用来查看帮助信息。 2.镜像Image docker images&#xff1a;查看当前本地仓库中存在哪些镜像。 …...

[python]python利用pyaudio录制系统声音没有立体声混音怎么录制系统音频

当电脑没有立体声混音导致Python写代码无法使用pyaudio进行录制系统声音怎么办&#xff1f;查阅资料和安装驱动等方法都不行&#xff0c;难道没办法了吗&#xff1f;那为什么电脑其他软件可以做到呢&#xff1f;因此研究了一下pyaudio在没有立体声混音情况下确实无法录制声音&a…...

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…...

第3章 【课后习题】(完整版)

【3.18】写出下面程序的运行结果 //3.18写出下面程序的运行结果 #include <iostream> using namespace std; class test{public:test();~test() {};private:int i; }; test::test() {i25;for(int ctr0;ctr<10;ctr){cout<<"Counting at "<<ctr…...

redis安装与配置

目录 1. 切换到 root 用户 2. 搜索安装包 3. 安装 redis 4. 查看 redis 是否正常存在 5. 修改ip 6. 重新启动服务器 7. 连接服务器 1. 切换到 root 用户 通过 su 命令切换到 root 用户。 2. 搜索安装包 apt search redis 这里安装的是下面的版本&#xff1a; 3. 安装 …...

kotlin first/last/indexOf/elementAt

kotlin 中 first 是取集合元素中第一个元素 last 是取集合元素中最后一个元素 indexOf 根据元素寻找下标&#xff0c;默认是第一个 elementAt 根据下标找元素 下面写一个demo 说明下他们几个的使用 val list listOf("A", "D", "A", "…...

计算机网络——网络中要解决的问题

1. 从网络管理的角度看 1.1 配置管理 追踪所有部署的硬件和软件资源&#xff0c;包括设备配置和软件版本。 1.2 故障管理​​​​​ 监控设备的运行状态&#xff0c;以确保所有组件都正常工作&#xff0c;以及快速响应和修复任何故障。 1.3 计费管理 监控资源消耗并进行计费…...

初识STL

目录 ​&#x1f4a1;STL &#x1f4a1;STL六大组件 &#x1f4a1;三大组件介绍 &#x1f4a1;容器 &#x1f4a1;算法 &#x1f4a1;迭代器 &#x1f4a1;示例 &#x1f4a1;STL C STL&#xff08;标准模板库&#xff09;是一套功能强大的 C 模板类&#xff0c;提供了…...

程序员副业之无人直播助眠

介绍和概览 大家好&#xff0c;我是小黑&#xff0c;本文给大家介绍一个比较轻松简单的副业&#xff0c;无人直播助眠副业。 这个项目的核心就是通过直播一些助眠素材来赚钱。比如你可以放一些舒缓的雨声之类的&#xff0c;吸引观众进来。然后&#xff0c;咱们可以挂个小程序…...

imazing破解版百度云2.17.3(附激活许可证下载)

iMazing是一款强大的 iOS 设备管理软件&#xff0c;不管是 iPhone、iPad 或 iPod Touch 设备&#xff0c;只要将 iOS 设备连接到计算机&#xff0c;就可以处理不同类型的数据。 iPhone 和 iPad 备份 借助 iMazing 的独有 iOS 备份技术&#xff08;无线、隐私和自动&#xff09…...

VS+QT五子棋游戏开发

1、首先安装好VS软件和QT库&#xff0c;将其配置好&#xff0c;具体不在此展开说明。 2、文件结构如下图&#xff1a; 3、绘制棋盘代码&#xff0c;如下&#xff1a; void Qwzq::paintEvent(QPaintEvent* event) {QPainter painter(this);painter.setRenderHint(QPainter::An…...

SpringBoot中动态注册接口

1. 说明 接口注册&#xff0c;使用RequestMappingHandlerMapping来实现mybatis中动态执行sql使用github上的SqlMapper工具类实现 2. 核心代码片段 以下代码为spring动态注册接口代码示例 Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping;publ…...

CSS 实现两个圆圈重叠部分颜色不同

这是期望实现的效果&#xff0c;由图可知&#xff0c;圆圈底图透明度是0.4&#xff0c;左侧要求重叠部分透明度是0.7&#xff0c;所以不能通过简单的透明度叠加来实现最右侧的效果。 这就需要另外新建一个图层来叠加在两个圆圈重叠上方。 直接看代码 .circle_hight {width: 1…...

【数据库系统概念】第7-14章集合

文章目录 第七章 数据库设计和E-R模型&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09;~~7.1 设计过程概览&#xff08;了解&#xff09;~~7.1.1 设计阶段7.1.2 设计选择 7.2 实体-联系模型&#xff08;重点掌握&#xff09;7.2.1 实体集7.2.2 联系集联系集的…...

Kibana

Kibana是一个针对Elastic Search的开源分析及可视化的平台&#xff0c;使用kibana可以查询、查看并与存储在ES索引的数据进行交互操作&#xff0c;可以理解为一个客户端的工具&#xff0c;比如mysql和navicat。 使用kibana能执行高级的数据分析&#xff0c;并能以图表、表格和地…...

C#使用 OpenHardwareMonitor获取CPU或显卡温度、使用率、时钟频率相关方式

C# 去获取电脑相关的基础信息&#xff0c;还是需要借助 外部的库&#xff0c;我这边尝试了自己去实现它 网上有一些信息&#xff0c;但不太完整&#xff0c;都比较零碎&#xff0c;这边尽量将代码完整的去展示出来 OpenHardwareMonitor获取CPU的温度和频率需要管理员权限 在没…...

K8S--- volumesvolumeMount

一、Volume 简介 在容器当中的磁盘文件(on-disk file )是短暂的(ephemeral),这会对重要的应用程序或者数据产生一些问题。当容器崩溃或停止时,会出现一个问题,即容器状态不会被保存,因此在容器生命周期内被创建或者修改的文件都将丢失。在容器崩溃期间,kubelet会以干净状…...

AntV-G6 -- 将G6图表应用到项目中

1. 效果图 2. 安装依赖 npm install --save antv/g6 3. 代码 import { useEffect } from alipay/bigfish/react; import G6 from antv/g6;const data {id: root,label: 利息收入,subLabel: 3,283.456,ratio: 3,children: [{id: child-a,label: 平均利息,subLabel: 9%,ratio:…...

第二百五十回

文章目录 1. 概念介绍2. 使用方法2.1 简单用法2.2 自定义用法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"三方包open_settings"相关的内容&#xff0c;本章回中将介绍另外一个三方包&#xff1a;bluetooth_enable_fork.闲话休提&#xff0c;让我们一起Talk Flu…...

如何把硬盘(分区)一分为二?重装系统的小伙伴不可不看

注意事项&#xff1a;本教程操作不当会导致数据丢失 请谨慎操作 请谨慎操作 请谨慎操作 前言 相信各位小伙伴都会切土豆吧&#xff0c;本教程就是教大家如何切土豆切得好的教程。 啊哈哈哈&#xff0c;开玩笑的。 比如你有一个D盘是200GB&#xff0c;想要把它变成两个100G…...

【AI视野·今日NLP 自然语言处理论文速览 第六十六期】Tue, 31 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 31 Oct 2023 (showing first 100 of 141 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Eval4NLP 2023 Shared Task on Prompting Large Language Models a…...

解决Canvas画图清晰度问题

最近在开发Web端远程桌面的时候遇到的一个问题&#xff0c;解决记录一下&#xff0c;分享给各位有需要用到的朋友。 先吹下水&#xff1a;远程桌面的连接我们是通过Websocket连接后&#xff0c;后端不断返回远程端的界面二进制数据流&#xff0c;我接收到之后转为图像&#xf…...

zookeeper经典应用场景之分布式锁

1. 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进…...

红队专题-Web安全/渗透测试-文件上传/下载/包含

文件上传/下载/包含 招募六边形战士队员利用目录穿越反弹SHELL实战测试2.2 提交报文修改检测3.2 文件内容检测绕过完整文件结构 检测 第四章&#xff1a;解析漏洞第一节 常见解析漏洞iis/nginx php fastcgi 取值错误 解析漏洞 &#xff08;配置错误&#xff09;nginx 文件名逻…...

安装阿里云CLI之配置阿里云凭证信息

有时候需要再主机上通过 OpenAPI 的调用访问阿里云&#xff0c;并完成控制&#xff0c;此时就需要在服务器上安装阿里云CLI&#xff0c;并完成账号的设置。 1. 登录阿里云创建账号 1.1 点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户 这个用户不用太多权限…...

阿里云和腾讯云2核2G3M服务器上传速度多少?

2核2G3M服务器上传速度多少&#xff1f;上传是按10M带宽算&#xff0c;上传速度是1280KB/秒&#xff0c;即1.25M/秒&#xff1b;下载速度按3M带宽计算&#xff0c;下载速度是384KB/秒。本文阿腾云atengyun.com是以阿里云为例的&#xff0c;阿里云服务器当公网带宽小于10M及10M以…...

网站建设工作怎么样/惠州seo全网营销

需求&#xff1a; 在一个列表页面中需要在点开的时候展开列表信息对应的详细信息页&#xff0c;由于信息展示用到的是静态页面&#xff0c;所以首先想到的是ifram加载详细信息页&#xff1b; 由此引发了iframe加载页面后高度没有适应详细信息页内容的高度的问题。 以下代码为参…...

网站开发都需要哪些图/电商平台怎么运营的

怎么获得segment header 的dump&#xff1f; 来源于&#xff1a; How to Obtain a Segment Header Dump (文档 ID 249814.1) oracle数据库中的每个segment都有对应的segment header。 segment header通常是分配给这个segment的第一个extent中的第一个block。 segment header包…...

wordpress电视剧采集解析/百度手机助手app下载并安装

Linux下命令安装DB2 9.7 express免费版数据库的步骤&#xff08;已经实践过并补充有关问题&#xff09; 可以使用图形界面&#xff0c;也可以使用手工安装的方式。我们先介绍最简单的安装方法。 1.从IBM网站下载DB2 9.7 express C版本&#xff1a;文件名db2exc_971_LNX_x86.ta…...

哪个视频网站做直播销售/泉州关键词排名工具

2019独角兽企业重金招聘Python工程师标准>>> 访问权限修饰符&#xff1a;说明类中成员的访问权限 类中的成员按访问权限分为public&#xff08;公有&#xff09;、protected&#xff08;保护&#xff09;、priavte&#xff08;私有&#xff09;。 公有成员可以被该类…...

西安cms模板建站/百度竞价推广有哪些优势

软件环境 Windows 7/8/10 或其它Windows操作系统 任务栏查看网速 在任务栏显示当前使用的网络数据&#xff0c;推荐使用NetSpeedMonitor 如果是WIN7及以下系统&#xff0c;可以从这儿下载&#xff1a;https://netspeedmonitor64.en.softonic.com/ 如果是WIN8/WIN10及以上系统&a…...

做网站一屏有多大/企业网站的功能

| 来源&#xff1a;七禾网 分享嘉宾&#xff1a;张琛实 本文为摘选 有些朋友可能对缠论的认识比较浅&#xff0c;我先用一点时间和大家简单介绍一下缠论中最基本的一部分内容。 我们今天的主题是&#xff0c;全球疫情升级下&#xff0c;如何用缠论捕捉市场剧烈…...