重载运算符C++---学习笔记

一、笔记

1. 重载运算符基础知识

重载运算符进行的运算和普通数的加减运算不同之处在于重载运算符的操作数为一个一个自定义的对象,所以相应的要对普通的运算符如+-*%/的调用方法进行重写,重载的本质还是函数调用

2. 重载运算符的语法

重载运算符的语法如下:

类名(这个类名是函数的返回值,a+b的结果还是一个对象) operator+-*/% ([类名 操作数1,]类名 操作数2){具体重载实现}
!!!重载的实质:函数调用

其中,operator运算符 是要重载的运算符,可以是任何有效的C++运算符,例如 +, -, *, / 等。

3. 类成员函数重载运算符

类成员函数重载运算符是指定义在类中的成员函数,用于重载运算符。在类成员函数重载运算符中,至少有一个操作数必须是类对象的实例。

//类的成员函数重载运算符M operator-(M b){//因为调用的时候是a.operator-(M b),a调用这个函数所以传参只要传breturn M(this->name,this->age-b.age);}

4. 友元函数重载运算符

友元函数重载运算符是指定义在类外部的函数,但是被声明为类的友元函数,允许访问类的私有成员。友元函数重载运算符可以实现更灵活的操作。

 重载运算符的调用方式

重载运算符可以通过两种方式进行调用:

  • 隐式调用:直接使用运算符符号进行调用,如 a + b
  • 显式调用:通过函数名进行显式调用,如 operator+(a, b)
#include<iostream>
using namespace std;
#include<string>
class M{
public://公有string name;int age;M(){}M(string name,int age):name(name),age(age){}void print(){cout<<name<<":"<<age<<endl;}//类的成员函数重载运算符M operator-(M b){//因为调用的时候是a.operator-(M b),a调用这个函数所以传参只要传breturn M(this->name,this->age-b.age);}
//友元函数
friend M operator+(M a,M b);
};
//语法:类名(这个类名是函数的返回值,a+b的结果还是一个对象) operator+-*/% (类名 操作数1,类名 操作数2,...类名操作数n){具体重载实现}
//!!!重载的实质:函数调用
M operator+(M a,M b){return M(a.name+b.name,a.age+b.age);}
int main(){
M a("小美",20);
M b("小明",19);
//1.1、重载函数的隐式调用:“+”这个运算符的重载函数隐式调用M c=a+b;
cout<<"1 友元函数运算符重载(传参个数等于操作数个数)"<<endl;
cout<<"1.1 重载的隐式调用(姓名字符串拼接,年龄整型相加):";c.print();//1.2、重载函数的显式调用
cout<<"1.2 重载的显示式调用(姓名字符串拼接,年龄整型相加):";
M c1= operator+(a,b);
c1.print();
//2.1隐式调用
M d=a-b;
M d1=a.operator-(b);
cout<<"成员函数重载减法运算符,只有年龄减,姓名不变:";
d.print();
d1.print();
}

二、运行结果

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

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

相关文章

Kubernetes-使用集群CA证书给用户颁发客户端证书访问Api-Server

一、官网地址 证书和证书签名请求 | Kubernetes 二、Demo 一、创建测试文件夹 cd ~ mkdir add_k8s_user_demo cd add_k8s_user_demo 二、创建符合X509标准的证书 openssl genrsa -out myuser.key 2048 openssl req -new -key myuser.key -out myuser.csr -subj "/CNmy…

自动微分技术在 AI for science 中的应用

本文简记我在学习自动微分相关技术时遇到的知识点。 反向传播和自动微分 以 NN 为代表的深度学习技术展现出了强大的参数拟合能力&#xff0c;人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。 例如&#xff0c;大部分图神经网络均基于消息传递的架构。在推理…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程&#xff0c;​背景为温度估计。 代码介绍 运行程序后&#xff0c;可以自己输入温度真实值&#xff1a; 以20℃为例&#xff0c;得到如下的估计值​&#xff1a; 滤波前的值和滤波后的值分别于期望值&#xff08;真实值&#xff09;作差…

基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

1. 实验环境 1.1 k8s环境 1&#xff09;Kubernetes 集群版本是 1.20.6 2&#xff09;k8s控制节点&#xff1a; IP&#xff1a;192.168.140.130 主机名&#xff1a;k8s-master 配置&#xff1a;4C6G 3&#xff09;k8s工作节点 节点1&#xff1a; IP&#xff1a;192.1…

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…

JVM运行时数据区 - 程序计数器

运行时数据区 Java虚拟机在执行Java程序的过程中&#xff0c;会把它管理的内存划分成若干个不同的区域&#xff0c;这些区域有各自的用途、创建及销毁时间&#xff0c;有些区域随着虚拟机的启动一直存在&#xff0c;有些区域则随着用户线程的启动和结束而建立和销毁&#xff0…

前端组件业务数据选择功能优雅写法

1. 业务场景 后台管理在实际业务中&#xff0c;经常可见的功能为&#xff1a;在当前的页面中从其他列表中选择数据。 例如&#xff0c;在一个商品活动列表页面中 需要选择配置的商品。 2. 遇到问题 从代码划分的角度来说&#xff0c;每个业务列表代码首先分散开来&#xff0…

LeetCode刷题之HOT100之在排序数组中查找元素的第一个和最后一个位置

下午雨变小了&#xff0c;但我并未去实验室&#xff0c;难得的一天呆在宿舍。有些无聊&#xff0c;看看这个&#xff0c;弄弄那个&#xff0c;听听歌&#xff0c;消磨时间。不知觉中时间指针蹦到了九点&#xff0c;做题啦&#xff01;朋友推荐了 Eason 的 2010-DUO 演唱会&…

2024年06月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2024年06月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

低代码是什么?开发系统更有什么优势?

低代码&#xff08;Low-Code&#xff09;是一种应用开发方法&#xff0c;它采用图形化界面和预构建的模块&#xff0c;使得开发者能够通过少量的手动编程来快速创建应用程序。这种方法显著减少了传统软件开发中的手动编码量&#xff0c;提高了开发效率&#xff0c;降低了技术门…

thingsboard物联网平台快速入门教程

第一步&#xff0c;搭建服务器 使用我已经建好的服务器&#xff0c;thingsboard测试账号,租户管理员账号&#xff0c;物联网测试平台-CSDN博客 第二步&#xff0c;创建一个设备&#xff0c;获取设备Token 用租户管理员账户登录&#xff0c;左侧找到实体->设备&#xff0c…

Oracle导出clob字段到csv

使用UTL_FILE ref: How to Export The Table with a CLOB Column Into a CSV File using UTL_FILE ?(Doc ID 1967617.1) --preapre data CREATE TABLE TESTCLOB(ID NUMBER, MYCLOB1 CLOB, MYCLOB2 CLOB ); INSERT INTO TESTCLOB(ID,MYCLOB1,MYCLOB2) VALUES(1,Sample row 11…

Fiddler抓包工具的使用

目录 1、抓包原理&#xff1a;&#x1f447; 2、抓包结果&#x1f447; 1&#xff09;如何查看一个http请求的原始摸样&#xff1a; 2&#xff09;分析数据格式&#xff1a; 3、请求格式分析&#x1f447; 4、响应格式分析&#x1f447; 官网下载&#xff1a;安装过程比较…

【评价类模型】Topsis

综合赋权法&#xff1a;Topsis法&#xff1a; 主要适用情况&#xff1a;题目提供了足够的评价指标和数据&#xff0c;数据已知&#xff0c;评价指标的类型差异较大 基本思想&#xff1a;将所有方案与理想解和夫理想解进行比较&#xff0c;通过激素那方案与这两个解的举例去欸的…

深度学习复盘与论文复现B

文章目录 1、Knowledge Review1.1 NLLLoss vs CrossEntropyLoss1.2 MNIST dataset1.2.1 Repare Dataset1.2.2 Design Model1.2.3 Construct Loss and Optimizer1.2.4 Train and Test1.2.5 Training results Pytorch-Lightning MNIST :rocket::fire:1.3 Basic Convolutional Neu…

笔记:美团的测试

0.先启动appium 1.编写代码 如下&#xff1a; from appium import webdriver from appium.webdriver.extensions.android.nativekey import AndroidKeydesired_caps {platformName: Android,platformVersion: 10,deviceName: :VOG_AL10,appPackage: com.sankuai.meituan,ap…

Android关闭硬件加速对PorterDuffXfermode的影响

Android关闭硬件加速对PorterDuffXfermode的影响 跑的版本minSdk33 编译SDK34 import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Port…

OpenMV学习笔记3——画图函数汇总

画图&#xff0c;即在摄像头对应位置画出图形&#xff0c;对于需要反馈信息的程序来说很直观。就如上一篇文章颜色识别当中的例子一样&#xff0c;我们在识别出的色块上画出矩形方框&#xff0c;并在中间标出十字&#xff0c;可以直观的看到OpenMV现在识别出的色块。 目录 一…

执法装备管理系统DW-S304的概念与特点

执法装备管理系统&#xff08;DW-S304&#xff09;适用于多种警务和安保场景&#xff0c;如警察局、特警队、边防检查站、监狱管理系统、生态环境局、执法大队等。它可以帮助这些机构提高对装备的控制能力&#xff0c;确保装备在需要时能够迅速到位&#xff0c;同时也减少了因装…

API开发秘籍:揭秘Swagger与Spring REST Docs的文档自动化神技

在这个数字化时代&#xff0c;如何让你的业务像外卖一样快速送达顾客手中&#xff1f;本文将带你走进Spring Boot的世界&#xff0c;学习如何利用RESTful API构建一个高效、直观的“外卖帝国”。从基础的REST架构风格&#xff0c;到Spring MVC的魔力&#xff0c;再到Swagger和S…