运算符重载(1)

1.加号运算符重载,这里用编译器统一的名称operator代替函数名

#include<iostream>
using namespace std;
//1.成员函数的加号重载
//2.全局函数的加号重载
class Person
{
public:Person() {};//1.成员函数的加号重载//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(int a ,int b){this->m_A = a;this->m_B = b;}int m_A;int m_B;
};//2.全局函数的加号重载
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;
}void test01()
{	Person p3;Person p1(10,10);Person p2(10,10);//1.成员函数加号重载实质//p3=p1.operator+(p2);//cout << p3.m_A << " " << p3.m_B << endl;//当实现了加号重载,就可以简化写成这样//2.全局函数加号重载实质p3 = operator+(p1, p2);cout << p3.m_A << " " << p3.m_B << endl;p3 = p1 + p2;cout << p3.m_A << " " << p3.m_B << endl;
}
int main()
{test01();
}

2.左移运算符重载

1.成员函数重载(行不通),会导致p在左,cout在右的问题

//全局函数左移重载
//这里cout的函数类型是ostream,这里cout前加引用是为了保证cout的唯一,引用即给cout起别名的意思
//为了能够连续cout<<...<<...<<...返回值必须是cout

#include<iostream>
using namespace std;class Person
{friend ostream& operator<<(ostream& cout, Person& p);
public:Person(int a, int b){this->m_A = a;this->m_B = b;}
private:int m_A;int m_B;
};//全局函数左移重载
//这里cout的函数类型是ostream,这里cout前加引用是为了保证cout的唯一,引用即给cout起别名的意思
//为了能够连续cout<<...<<...<<...返回值必须是cout
ostream& operator<<(ostream& cout, Person& p)
{cout << "m_A = " << p.m_A << " " << "m_B = " << p.m_B;return cout;
}void test01()
{	Person p(10, 10);//由于p是自定义类型的变量,cout并不知道返回什么,因此要自己实现cout函数的返回cout << p << endl;
}
int main()
{test01();
}

在观看视频,敲代码的时候,我思考为什么Person &一个函数,于是我搜了以下解释:

3.递增运算符重载

#include<iostream>
using namespace std;class MyInteger
{friend ostream& operator<<(ostream& cout, MyInteger myint);
public:MyInteger(){m_Num = 0;}//1.前置++  这里用引用是为了一直为一个数据进行递增操作//例如++(++myint)时,里面myint从1变为了2,导致更换了数据.//其实本质就是不用引用返回,每次返回的就是一个新对象,拷贝调用原则//防止拷贝构造函数,新的对象会调用新的拷贝构造函数//这里面的this指针是全局变量!!!!MyInteger &operator++(){this->m_Num++;return *this;}//2.后置++ 这里的是占位参数,用来区分前置++与后置++的//如果这里用引用的话&operator++,这里会返回局部变量的引用,该函数调用完后temp被释放,后面再解引用后会造成非法操作了MyInteger operator++(int){    //先 记录当前的结果MyInteger temp = *this;//后递增m_Num++;return temp;}private:int m_Num;
};void test01()
{    MyInteger myint;//cout << ++(++myint) << endl;cout << ++myint << endl;
}void test02()
{MyInteger myint;cout << myint++ << endl;cout << myint << endl;
}
ostream& operator<<(ostream& cout, MyInteger myint)
{cout << "m_Num的值为: " << myint.m_Num;return cout;
}int main()
{/*test01();*/test02();
}

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

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

相关文章

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签&#xff0c;H5的兼容性处理&#xff09; 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签&#xff08;HTML元素&#xff09;和属性&#xff0c;标签定义了内容的类型或结构&#xff0c;而…

k8s学习(三十七)centos下离线部署kubernetes1.30(高可用)

文章目录 准备工作1、升级操作系统内核1.1、查看操作系统和内核版本1.2、下载内核离线升级包1.3、升级内核1.4、确认内核版本 2、修改主机名/hosts文件2.1、修改主机名2.2、修改hosts文件 3、关闭防火墙4、关闭SELINUX配置5、时间同步5.1、下载NTP5.2、卸载5.3、安装5.4、配置5…

【QEMU系统分析之启动篇(二十一)】

系列文章目录 第二十一章 QEMU系统仿真的加速器上电后设置分析 文章目录 系列文章目录第二十一章 QEMU系统仿真的加速器上电后设置分析 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环3. qemu_default_main()4. qemu_main_loop()ma…

BPE、Wordpiece、Unigram、SpanBERT等Tokenizer细节总结

BPE(Byte Pair Encoding) GPT-2和Roberta用的是这种&#xff0c;不会产生[UNK]这个unknown字符 这部分部分摘录自https://martinlwx.github.io/zh-cn/the-bpe-tokenizer/ 看以下code例子就足够理解了&#xff0c;核心是维护self.merges&#xff08;维护一个pair->str的字…

[蓝桥杯2024]-Reverse:rc4解析(对称密码rc4)

无壳 查看ida 这里应该运行就可以得flag&#xff0c;但是这个程序不能直接点击运行 按照伪代码写exp 完整exp&#xff1a; keylist(gamelab) content[0xB6,0x42,0xB7,0xFC,0xF0,0xA2,0x5E,0xA9,0x3D,0x29,0x36,0x1F,0x54,0x29,0x72,0xA8, 0x63,0x32,0xF2,0x44,0x8B,0x85,0x…

如何在 Visual Studio 中通过 NuGet 添加包

在安装之前要先确定Nuget的包源是否有问题。 Visual Studio中怎样更改Nuget程序包源-CSDN博客 1.图形界面安装 打开您的项目&#xff0c;并在解决方案资源管理器中选择您的项目。单击“项目”菜单&#xff0c;然后选择“管理 NuGet 程序包”选项。在“NuGet 包管理器”窗口中…

详解如何品味品深茶的精髓

在众多的茶品牌中&#xff0c;品深茶以其独特的韵味和深厚的文化底蕴&#xff0c;赢得了众多茶友的喜爱。今天&#xff0c;让我们一同探寻品深茶的精髓&#xff0c;品味其独特的魅力。 品深茶&#xff0c;源自中国传统茶文化的精髓&#xff0c;承载着世代茶人的智慧与匠心。这…

理解JavaScript对象[Bom]:属性、方法

对象是什么 在JavaScript中&#xff0c;对象&#xff08;Object&#xff09;是一种复合的数据类型&#xff0c;它允许你将数据和功能&#xff08;方法&#xff09;组合在一起。 创建对象 var person { firstName: John, lastName: Doe, age: 30, greet: function() …

03-MVC执行流程-参数解析与Model

重要组件 准备Model&#xff0c;Controller Configuration public class WebConfig {ControllerAdvicestatic class MyControllerAdvice {ModelAttribute("b")public String bar() {return "bar";}}Controllerstatic class Controller1 {ResponseStatus(H…

windows环境下安装Apache

首先apache官网下载地址&#xff1a;http://www.apachelounge.com/download/按照自己的电脑操作系统来安装 这里我安装的是win64 主版本是2.4的apache。 然后解压压缩包到一个全英文的路径下&#xff01;&#xff01;&#xff01;一定一定不要有中文 中文符号也不要有&#xff…

ansible-copy用法

目录 概述实践不带目录拷贝带目录拷贝 概述 ansible copy 常用用法举例 不带目录拷贝&#xff0c;拷贝的地址要写全 带目录拷贝&#xff0c;拷贝路径不要写在 dest 路径中 实践 不带目录拷贝 # with_fileglob 是 Ansible 中的一个循环关键字&#xff0c;用于处理文件通配符匹…

【Vue3+Tres 三维开发】02-Debug

预览 介绍 Debug 这里主要是讲在三维中的调试,同以前threejs中使用的lil-gui类似,TRESJS也提供了一套可视化参数调试的插件。使用方式和之前的组件相似。 使用 通过导入useTweakPane 即可 import { useTweakPane, OrbitControls } from "@tresjs/cientos"const {…

数字文旅重塑旅游发展新格局:以数字化转型为突破口,提升旅游服务的智能化水平,为游客带来全新的旅游体验

随着信息技术的迅猛发展&#xff0c;数字化已成为推动各行各业创新发展的重要力量。在旅游业领域&#xff0c;数字文旅的兴起正以其强大的驱动力&#xff0c;重塑旅游发展的新格局。数字文旅以数字化转型为突破口&#xff0c;通过提升旅游服务的智能化水平&#xff0c;为游客带…

HarmonyOS Next从入门到精通实战精品课

第一阶段&#xff1a;HarmonyOS Next星河版从入门到精通该阶段由HarmonyOS Next星河版本出发&#xff0c;介绍HarmonyOS Next版本应用开发基础概念&#xff0c;辅助学员快速上手新版本开发范式&#xff0c;共计42课时 第一天鸿蒙NEXT Mac版、Windows版【编辑器】和【模拟器】&a…

java 一个方法里面的 所有方法并行执行 用多线程

java 一个方法里面的 所有方法并行执行 用线程 package com.example.springbootycw.schedule;import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent…

android 内部保存数据

在Android中&#xff0c;内部序列化对象通常指的是将对象的状态转换为字节流&#xff0c;以便可以将对象保存到文件、通过网络发送&#xff0c;或者在应用的不同部分之间传递。在Java中&#xff0c;序列化是通过实现java.io.Serializable接口来完成的。Android继承了Java的序列…

BootStrap详解

Bootstrap简介 什么是BootStrap&#xff1f; BootStrap来自Twitter&#xff0c;是目前最受欢迎的响应式前端框Bootstrap是基于HTML、CSS、JavaScript的&#xff0c;它简洁灵活&#xff0c;使得Web开发更加快捷 为什么使用Bootstrap&#xff1f; 移动设备优先&#xff1a;自…

Kafka 3.x.x 入门到精通(07)——Java应用场景——SpringBoot集成

Kafka 3.x.x 入门到精通&#xff08;07&#xff09;——Java应用场景——SpringBoot集成 4. Java应用场景——SpringBoot集成4.1 创建SpringBoot项目4.1.1 创建SpringBoot项目4.1.2 修改pom.xml文件4.1.3 在resources中增加application.yml文件 4.2 编写功能代码4.2.1 创建配置…

如何维护 Oracle B*tree 索引。 多列index是合并一起指向rowid的

尽管这是一份较旧的文档&#xff0c;但以下信息仍与更高版本相关。 Although this is an older document, the information below is still relevant to later versions. 范围 它旨在帮助试图了解如何维护 Oracle B*tree 索引的用户。 详 Oracle 版本 8 提供了五种索引方案…

机器人-轨迹规划

旋转矩阵 旋转矩阵--R--一个3*3的矩阵&#xff0c;其每列的值时B坐标系在A坐标系上的投影值。 代表B坐标系相对于A坐标系的姿态。 旋转矩阵的转置矩阵 其实A相对于B的旋转矩阵就相当于把B的列放到行上就行。 视频 &#xff08;将矩阵的行列互换得到的新矩阵称为转置矩阵。&…