Chapter 9 运算符重载

news2024/11/19 7:27:31

目的:运用运算符重载

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.1 什么是运算符重载

1.重载的定义:就是重新赋予新的定义

2.函数重载:就是对一个已有的函数赋予新的含义,使之实现新的功能,因此,同一个函数名就可以用来代表不同功能的函数,也就是一名多用

3.例如:“<<”是C++的位运算中的位运算符(左移),但在输出操作中又是与流对象cout配合使用的流提取运算符,“>>”也是位运算符(右移),但在输入操作中又是与流对象cin配合使用的流提取运算符,这就是运算符重载

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.2 对运算符重载的方法

1.运算符重载的方法是定义一个重载运算符的函数

2.运算符重载实质上是函数重载

3.形式: 函数类型 operator 运算符名称(形参表){对运算符的重载处理}

a:operator是关键词

b:函数名是由operator和运算符组成

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.3 重载运算符规则

1.C++不允许用户定义新的运算符,只能对已有的C++运算符进行重载

2.C++允许重载的运算符有很多,但只有5个运算符不能重载:

3.重载不能改变运算符运算对象(即操作数)的个数,例如:“+、-、*、/”都是两个操作数,我们就不可能用重载是他改变为一个操作数或者三个操作数

4.重载符不能改变运算符的优先级别顺序

5.重载不能改变运算符的结合性,例如:赋值运算“=”是自右至左结合,重载后仍然是自右至左

6.重载运算符的函数不能有默认参数

7.重载运算符必须和用户定义类型的对象一起使用,其参数至少有一个类对象(或类对象的引用),也就是说,不能全是C++的标准类型

8.用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载

9.从理论上说,可以将一个运算重载为执行任意的操作,应当使用重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能

10.如果运算符函数重载为成员函数,它的第1个参数必须是本类的对象,当第1个操作数不是类对象时,不能将运算符函数重载为成员函数,如果将运算符“+”函数重载为类的成员函数,交换律不适用,所以因为这些原因,是将双目运算符函数重载为友元函数,单目运算符则多重载为成员函数

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.4 运算符重载函数作为类成员函数和友元函数(重大区别在后面的参数个数)

1.对运算符重载的函数有两种处理方式:

a:把运算符重载的函数作为类的成员函数

b:运算符重载的函数不是类的成员函数(可以是一个普通函数),在类中把它声明为友元函数

class T
{
  public:
    int x;
    int y;
    friend T operator +(T & x1,T & x2);//友元函数要有两个参数
    T operator +(T & x1);//若是成员函数只有一个参数

}

2.补充:

a:运算符重载的函数作为类的成员函数:如果将运算符重载函数作为成员函数,他可以通过this指针自由地访问本类的数据成员,因此可以少些一个参数

b:在类中把它声明为友元函数:双目运算符重载为友元函数时,由于友元函数不是该类的成员函数,因此在函数的形参表列中必须有两个参数,不能省略

3.重载单目运算符

class T
{
   T operator ++();//作为成员函数可以没有参数
   friend T operator ++(T&);//作为友元函数
}

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.7 重载流插入运算符“<<”和流提取运算符“>>”

1.“<<”和“>>”重载的函数形式

a:形式一:istream & operator >> (istream &, 自定义类 &)

b:形式二: ostream & operator << (ostream &, 自定义类 &)

2.只能将重载“>>”和“<<”的函数作为友元函数,而不能将他们定义为成员函数

🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓🍓

10.8 不同类型数据间的转换

1.有两种转换类型:显示类型转换+隐式类型转换

a:隐式类型转换:系统自动的,用户可以不管

b:显示类型转换:用户可以进行转换,形式:类型名(数据) 或者 (类型名)数据

2.用转换构造函数将其他类型数据转换为类对象

a.温习一下几种构造函数

(1):默认构造函数,以Complex类为例,函数原型的形式为

Complex();//没有参数

(2):用于初始化的构造函数,函数原型的形式为

Complex(double r,double i);//形参列表中一般有两个以上的参数

(3):用于复制对象时复制构造函数,函数原型的形式为

Complex (Complex & c)//形参是本类对象的引用

b:转换构造函数的作用:将一个其他类型的数据转换成一个类对象

注意⚠️:转换构造函数只能有一个参数,如果有多个参数,他就不是转换构造函数,例如:Complex (double r){real =r;imag=0;}

3.类型转换函数:它的作用是将一个类对象转换成另一类型的数据

a:形式:operator 类型名() {实现转换的语句}

b:类型转换函数只能作为成员函数,因为转换的主体是本类的对象

共同学习,欢迎指正!

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

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

相关文章

OpenHarmony4.0适配LVDS屏幕驱动

1.概述 手头有一块RK3568的开发板OK3568-C&#xff0c;但是还没有适配OpenHarmony&#xff0c;用的还是LVDS屏幕&#xff0c;但是官方和网上好像还没有OpenHarmony4.0的LVDS屏幕驱动的通用实现&#xff0c;所以决定尝试了一下适配该开发板&#xff0c;完成LVDS屏幕驱动的适配&…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑风电出力不确定性的电网无功-电压控制鲁棒分区方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这个标题涉及到考虑风电出力不确定性的电网无功-电压控制鲁棒分区方法。让我们逐步解读这个标题的主要关键词和概念&#xff1a; 考虑风电出力不确定性…

Ubuntu server搭建dhcp服务器

安装 直接使用一下命令进行安装 apt-get install isc-dhcp-server 以下就是安装好的图片 然后进入dhcp目录 cd /etc/dhcp 进入后用ls查看当前目录存在哪些文件 使用如下进入dhcp.conf vim dhcpd.conf 红&#xff1a;设置ip域和子网掩码 绿&#xff1a;设置ip池范围 黄…

Linux下的HTTP代理服务器Squid的配置和使用

Squid是一个流行的Linux下的HTTP代理服务器软件。通过Squid&#xff0c;你可以在Linux服务器上设置一个代理服务器&#xff0c;以便为客户端提供安全的网络连接和数据传输。以下是Squid的配置和使用指南。 1. 安装Squid 首先&#xff0c;你需要确保你的Linux系统上已经安装了…

机器学习算法 - 马尔可夫链

马尔可夫链&#xff08;Markov Chain&#xff09;可以说是机器学习和人工智能的基石&#xff0c;在强化学习、自然语言处理、金融领域、天气预测、语音识别方面都有着极其广泛的应用 > The future is independent of the past given the present 未来独立于过去&#xff…

arcgis javascript api4.x加载天地图wgs84(wkid:4326)坐标系

需求&#xff1a; 使用arcgis javascript api4.x以basetilelayer方式加载天地图wgs84&#xff08;wkid&#xff1a;4326&#xff09;坐标系 效果&#xff1a; 代码&#xff1a; 提示&#xff1a;&#xff08;下述三个文件放同一个文件夹下&#xff09; 4326.js define([ex…

五、mysql8忘记root用户密码怎么办?怎么修改用户密码?

目录 1、忘记密码怎么修改密码 1&#xff09;、首先停止mysql的服务 2&#xff09;、新建一个文本文件&#xff0c;文本文件中就写一条修改密码的语句 3&#xff09;、使用管理员权限运行cmd命令行&#xff0c;运行以下命令&#xff1a; 4&#xff09;、然后按CTRLC结束上…

Jetbrains ai assistant激活后仍无法使用,怎么回事?

用正式的ai assistant激活码激活后仍然无法使用 首先获取了ai assistant激活码&#xff0c;激活后如下 地址&#xff1a;https://web.52shizhan.cn 上图是已经激活成功了&#xff0c;但是在右侧这里打开ai assistant不可用 点击开始使用ai assistant 出错 以上是用了ai as…

ssm基于web的学生考勤管理系统论文

基于Web的学生考勤管理系统的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于学生考勤信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff…

[Kubernetes]10. k8s部署Goweb+mysql项目实战演练

一.安装docker构建镜像 如果要本地构建镜像的话,对应节点还需要安装docker,安装教程见:[Docker]一.Docker 简介与安装 linux环境,centos8下 docker及docker compose安装教程 k8s部署Goweb+mysql项目有两种方法:第一种是传统部署方法,第二种是通过ConfigMap实现应用配置分离部署…

数据库第一次作业

1.创建一个英雄表 create table t_hero ( id int primary key auto_increment, name varchar(10) unique not null, gender char(5) check (gender in (男,女)), grade char(5) default 5星, groups char(5) check (groups in (毁灭,巡猎,智识,存护,…

4.2V锂电线性1.2A充电芯片WT4056

4.2V锂电线性1.2A充电芯片WT4056 WT4056是一款专为单节锂离子电池设计的恒流/恒压线性充电器。其简洁的外部电路设计使其非常适用于便携设备的供电&#xff0c;同时兼容USB电源和适配器电源。该充电器内部采用了防倒充电路&#xff0c;无需额外添加外部隔离二极管。通过热反馈…

Zabbix监控(1)

目录 一.什么是zabbix Zabbix 组件&#xff1a; 主动模式&#xff1a; 被动模式&#xff1a; Zabbix 工作原理&#xff1a; zabbix 监控原理&#xff1a; 二.Zabbix 6.0 部署 先安装nginx&#xff0c;php&#xff08;yum源安装&#xff09;&#xff1a; 安装nginx&…

用bat脚本执行py文件以及批量执行py文件(全网超详细)

1.前言 对于python代码&#xff0c;每次执行一个文件就要运行一个命令&#xff0c;太过麻烦 在Windows电脑上&#xff0c;想一次性执行多个python文件的代码&#xff0c;就需要用到bat脚本 2.python代码 先写几个python代码的文件 如下图 3.py文件为中文&#xff0c;用bat执…

Javaweb之SpringBootWeb案例的详细解析

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识&#xff0c;也讲解了Web后端开发的基础(HTTP协议、请求响应)&#xff0c;并且也讲解了数据库MySQL&#xff0c;以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来&#xff0c;我们就通过一个案例&#xf…

MATLAB实验Simulink的应用

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740734 一、实验目的 1.熟悉Simulink操作环境。 2.掌握建立系统仿真模型以及系统仿真分析的方法。 二、实验内容 1.利用Simulink仿真下列曲…

【数据结构】哈希表详解,举例说明 java中的 HashMap

一、哈希表&#xff08;Hash Table&#xff09;简介&#xff1a; 哈希表是一种数据结构&#xff0c;用于实现字典或映射等抽象数据类型。它通过把关键字映射到表中的一个位置来实现快速的数据检索。哈希表的基本思想是利用哈希函数将关键字映射到数组的索引位置上&#xff0c;…

centos7 arm服务器编译安装openssl 1.1.1版本

前言 在centos7中&#xff0c;默认安装的openssl版本是1.0.2&#xff0c;太低了&#xff0c;在python项目开发中&#xff0c;由于需要用到requests包&#xff0c;这时候就会出现如下错误“ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1”&#xff1a; 解决办法就只能…

10万字200道软件测试经典面试总结(附答案)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;获取《110万字200道软件测试经典面试总结&#xff08;附答案&#xff09;》pdf&#xff0c;背题更方便&#xff0c;一文在手&#xff…

lvgl模拟器

学习目标 能够搭建lvgl模拟器开发环境 学习内容 项目源码准备 http://docs.lvgl.io/latest/en/html/get-started 下载模拟器项目 GitHub - lvgl/lv_port_pc_eclipse: PC simulator project for LVGL embedded GUI Library. Recommended on Linux and Mac. 下载lvgl源码 …