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

C++超详细讲解操作符的重载

一、需要解决的问题下面的复数解决方案是否可行下面看一下复数的加法操作123456789101112131415161718192021222324252627282930313233343536#include stdio.hclassComplex{inta;intb;public:Complex(inta 0,intb 0){this-a a;this-b b;}intgetA(){returna;}intgetB(){returnb;}friendComplex Add(constComplex p1,constComplex p2);};Complex Add(constComplex p1,constComplex p2){Complex ret;ret.a p1.a p2.a;ret.b p1.b p2.b;returnret;}intmain(){Complex c1(1, 2);Complex c2(3, 4);Complex c3 Add(c1, c2);// c1 c2printf(c3.a %d, c3.b %d\n, c3.getA(), c3.getB());return0;}输出结果如下思考Add 函数可以解决 Complex 对象相加的问题但是 Complex 是现实世界中确实存在的复数并且复数在数学中的地位和普通的实数相同。为什么不能让操作符也支持复数相加呢这个就涉及到操作符的重载。二、操作符重载C 中的重载能够扩展操作符的功能操作符的重载以函数的方式进行本质用特殊形式的函数扩展操作符的功能通过 operator 关键字可以定义特殊的函数operator 的本质是通过函数重载操作符语法下面来初探一下操作符重载123456789101112131415161718192021222324252627282930313233343536#include stdio.hclassComplex{inta;intb;public:Complex(inta 0,intb 0){this-a a;this-b b;}intgetA(){returna;}intgetB(){returnb;}friendComplex operator (constComplex p1,constComplex p2);};Complex operator (constComplex p1,constComplex p2){Complex ret;ret.a p1.a p2.a;ret.b p1.b p2.b;returnret;}intmain(){Complex c1(1, 2);Complex c2(3, 4);Complex c3 c1 c2;// operator (c1, c2)printf(c3.a %d, c3.b %d\n, c3.getA(), c3.getB());return0;}输出结果如下可以将操作符重载函数定义为类的成员函数比全局操作符重载函数少—个参数左操作数)不需要依赖友元就可以完成操作符重载编译器优先在成员函数中寻找操作符重载函数下面来实现在成员函数中重载操作符123456789101112131415161718192021222324252627282930313233343536373839404142434445#include stdio.hclassComplex{inta;intb;public:Complex(inta 0,intb 0){this-a a;this-b b;}intgetA(){returna;}intgetB(){returnb;}Complex operator (constComplex p){Complex ret;printf(Complex operator (const Complex p)\n);ret.a this-a p.a;ret.b this-b p.b;returnret;}friendComplex operator (constComplex p1,constComplex p2);};Complex operator (constComplex p1,constComplex p2){Complex ret;printf(Complex operator (const Complex p1, const Complex p2)\n);ret.a p1.a p2.a;ret.b p1.b p2.b;returnret;}intmain(){Complex c1(1, 2);Complex c2(3, 4);Complex c3 c1 c2;// c1.operator (c2)printf(c3.a %d, c3.b %d\n, c3.getA(), c3.getB());return0;}输出结果如下这个说明编译器优先在成员函数中寻找操作符重载函数故上述代码可以直接写成1234567891011121314151617181920212223242526272829303132333435#include stdio.hclassComplex{inta;intb;public:Complex(inta 0,intb 0){this-a a;this-b b;}intgetA(){returna;}intgetB(){returnb;}Complex operator (constComplex p){Complex ret;ret.a this-a p.a;ret.b this-b p.b;returnret;}};intmain(){Complex c1(1, 2);Complex c2(3, 4);Complex c3 c1 c2;// c1.operator (c2)printf(c3.a %d, c3.b %d\n, c3.getA(), c3.getB());return0;}三、小结操作符重载是 C 的强大特性之一操作符重载的本质是通过函数扩展操作符的功能operator 关键字是实现操作符重载的关键操作符重载遵循相同的函数重载规则全局函数和成员函数都可以实现对操作符的重载

相关文章:

C++超详细讲解操作符的重载

一、需要解决的问题下面的复数解决方案是否可行&#xff1f;下面看一下复数的加法操作&#xff1a;123456789101112131415161718192021222324252627282930313233343536#include <stdio.h>class Complex {int a;int b;public:Complex(int a 0, int b 0){this->a a;t…...

别再只会重启了!WinSCP连接Linux服务器反复超时,试试这个SSH配置项

根治WinSCP连接Linux服务器反复超时的SSH深度配置指南 每次用WinSCP传文件都像在抽奖&#xff1f;连接时好时坏&#xff0c;进度条卡住又突然恢复&#xff0c;这种间歇性超时问题往往比完全连不上更让人抓狂。作为系统管理员&#xff0c;我花了三年时间排查各类SSH连接问题&…...

从柴油卡车到物联网网关:老牌J1708协议如何通过MQTT桥接融入现代车联网?

从柴油卡车到物联网网关&#xff1a;老牌J1708协议如何通过MQTT桥接融入现代车联网&#xff1f; 重型柴油卡车发动机的轰鸣声里&#xff0c;藏着一段跨越三十年的通信史。当工程师们面对那些仅支持J1708/J1587协议的老旧ECU模块时&#xff0c;如何让这些"沉默的巨人"…...

AMD Ryzen处理器深度调优实战:利用SMUDebugTool实现硬件级精准控制

AMD Ryzen处理器深度调优实战&#xff1a;利用SMUDebugTool实现硬件级精准控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...

Godot 4 Tiled地图导入插件YATI:无缝衔接关卡设计与游戏开发

1. 项目概述&#xff1a;YATI&#xff0c;一个为Godot 4量身打造的Tiled地图导入器如果你和我一样&#xff0c;是一个喜欢用Tiled来设计游戏关卡&#xff0c;同时又选择Godot 4作为游戏引擎的开发者&#xff0c;那你一定遇到过那个经典的“最后一公里”问题&#xff1a;如何在G…...

YesPlayMusic:重新定义你的网易云音乐体验,告别广告与社交干扰

YesPlayMusic&#xff1a;重新定义你的网易云音乐体验&#xff0c;告别广告与社交干扰 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器&#xff0c;支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic 你是…...

如何让Windows任务栏透明化:TranslucentTB完整指南

如何让Windows任务栏透明化&#xff1a;TranslucentTB完整指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款轻量级…...

从‘学生选课’到‘电商订单’:3个真实业务场景图解ER图三大关系

实战图解&#xff1a;三大业务场景下的ER关系建模精髓 当产品经理在白板上画出第一个矩形框时&#xff0c;整个会议室突然安静了下来——这个简单的几何图形即将决定未来数据库的结构走向。ER图作为数据世界的建筑蓝图&#xff0c;其核心价值不在于图形本身&#xff0c;而在于如…...

VideoDownloadHelper:如何用浏览器插件轻松下载网络视频

VideoDownloadHelper&#xff1a;如何用浏览器插件轻松下载网络视频 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 作为一名技术爱好者&…...

开源一个基于INA226的USB-C PD诱骗器功耗监测仪,硬件软件全公开

开源USB-C PD诱骗器功耗监测仪&#xff1a;从硬件设计到软件实现的全栈解析 最近在调试一个支持USB PD协议的移动电源时&#xff0c;我发现市面上大多数功率检测工具都无法准确捕捉快充协议握手过程中的动态功率变化。这促使我开发了一款基于INA226的高精度USB-C PD诱骗器功耗监…...

抖音视频批量下载终极指南:免费工具快速保存无水印内容

抖音视频批量下载终极指南&#xff1a;免费工具快速保存无水印内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

三步解决iOS设备激活锁难题:A9-A11芯片设备离线绕过方案

三步解决iOS设备激活锁难题&#xff1a;A9-A11芯片设备离线绕过方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当你面对二手iPhone的激活锁界面&#xff0c;或是因忘记Apple ID密码而无法使用设备…...

终极OBS-VST插件指南:免费提升直播音频质量的完整方法

终极OBS-VST插件指南&#xff1a;免费提升直播音频质量的完整方法 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst OBS-VST插件是开源音频处理工具&#xff0c;让你能在OBS Studio中直接使用VST 2.x音频插件作为…...

LeetCode题解【2140. 解决智力问题:逆序动态规划】

题目概述 给定一个二维数组 questions&#xff0c;其中 questions[i] [points_i, brainpower_i]。 对于第 i 道题&#xff0c;我们有两种选择&#xff1a; 解决这道题&#xff1a;获得 points_i 分&#xff0c;但接下来必须跳过 brainpower_i 道题&#xff1b;跳过这道题&a…...

蓝牙CVSD语音编解码

0 Preface/Foreword1 CVSD介绍1.1 CVSD全称CVSD&#xff1a; Continuous Variable Slope Delta modulation&#xff0c;连续可变斜率增量调整CVSD是经典蓝牙&#xff08;Bluetooth Classic&#xff09;里HFP通话最基础、最传统的语音编码方式。1.2 CVSD类型CVSD本质是&#xff…...

揭秘智能宏编辑革命:GSE宏编辑器如何重塑魔兽世界技能自动化

揭秘智能宏编辑革命&#xff1a;GSE宏编辑器如何重塑魔兽世界技能自动化 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-…...

ARM C/C++库多线程安全机制与优化实践

1. ARM C/C库多线程安全机制解析在嵌入式开发领域&#xff0c;多线程编程已成为提升系统性能的主流方案。ARM架构作为嵌入式系统的核心&#xff0c;其C/C标准库的多线程安全实现直接影响着系统稳定性和开发效率。与通用操作系统环境不同&#xff0c;ARM嵌入式环境通常没有完整的…...

小白友好:YOLOv8鹰眼目标检测镜像部署与初体验指南

小白友好&#xff1a;YOLOv8鹰眼目标检测镜像部署与初体验指南 1. 认识YOLOv8鹰眼目标检测 1.1 什么是YOLOv8鹰眼目标检测&#xff1f; YOLOv8鹰眼目标检测是一款基于Ultralytics YOLOv8模型的工业级实时多目标检测系统。它能够快速识别图像中的80种常见物体&#xff0c;包括…...

Pearcleaner:让macOS重获新生的智能清理伙伴

Pearcleaner&#xff1a;让macOS重获新生的智能清理伙伴 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾发现&#xff0c;即使删除了macOS上的应用程…...

AI内容安全工程:构建企业级LLM应用的防护体系

为什么内容安全是LLM应用的必答题&#xff1f; 2025年&#xff0c;全球已有多起因LLM应用内容安全缺失导致的重大事故&#xff1a;客服机器人被诱导发表种族歧视言论、AI助手泄露用户隐私数据、教育应用输出不适合未成年人的内容。随着AI监管法规趋严&#xff0c;内容安全不再是…...

音乐解锁完整指南:3步免费解密任何加密音乐文件

音乐解锁完整指南&#xff1a;3步免费解密任何加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://git…...

全面数据恢复方案:TestDisk与PhotoRec的实战技术深度解析

全面数据恢复方案&#xff1a;TestDisk与PhotoRec的实战技术深度解析 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 数据丢失是技术人员和普通用户都可能面临的严峻挑战。TestDisk与PhotoRec作为开源数据恢…...

告别ArUco?实测对比AprilTag与ArUco在机器人视觉引导中的性能差异

AprilTag与ArUco实战对比&#xff1a;机器人视觉引导系统的技术选型指南 当机器人需要在复杂环境中实现精准定位时&#xff0c;视觉基准系统的选择往往成为项目成败的关键。AprilTag和ArUco作为两种主流的视觉标记系统&#xff0c;各自拥有独特的优势与适用场景。本文将通过一组…...

CompressO:免费开源的终极跨平台视频压缩工具完整指南

CompressO&#xff1a;免费开源的终极跨平台视频压缩工具完整指南 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO …...

Windows上安装安卓应用:APK安装器的全新体验

Windows上安装安卓应用&#xff1a;APK安装器的全新体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK安装器是一款专为Windows系统设计的安卓应用安装工具&#…...

Qwerty Learner终极指南:如何通过打字练习高效记忆英语单词

Qwerty Learner终极指南&#xff1a;如何通过打字练习高效记忆英语单词 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:…...

告别SDK!用Vitis IDE给ZYNQ板子固化程序到Flash的保姆级图文教程

从SDK到Vitis&#xff1a;ZYNQ开发板Flash程序固化全流程精解 如果你是一位长期使用Xilinx SDK进行ZYNQ开发的工程师&#xff0c;最近打开Vitis IDE时可能会感到一丝陌生——就像走进曾经熟悉的办公室却发现所有家具都被重新排列过。这种不适感在尝试将程序固化到Flash时尤为明…...

告别C++编译等待:用Rust重写Qt小部件,体验极速构建与内存安全

告别C编译等待&#xff1a;用Rust重写Qt小部件&#xff0c;体验极速构建与内存安全 每次修改一行C代码后漫长的编译等待&#xff0c;是否让你在Qt开发中感到效率瓶颈&#xff1f;那些难以追踪的内存泄漏和悬空指针问题&#xff0c;是否已成为项目中的定时炸弹&#xff1f;今天&…...

别再手动写Dockerfile了!Docker AI Toolkit 2026自动生成AI应用容器镜像,支持37种框架+12类硬件加速器,3步完成交付

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker AI Toolkit 2026&#xff1a;重新定义AI容器化交付范式 Docker AI Toolkit 2026 是面向生产级 AI 应用的一体化容器化开发套件&#xff0c;深度融合模型编译、硬件感知调度与可信推理链路验证能…...

Elasticsearch搜索排序实战:时间衰减函数(Decay Function)评分优化全解析

[TOC](Elasticsearch搜索排序实战&#xff1a;时间衰减函数(Decay Function)评分优化全解析)&#x1f33a;The Begin&#x1f33a;点点关注&#xff0c;收藏不迷路&#x1f33a;前言 在内容搜索、电商推荐、新闻资讯、短视频、社区帖子等几乎所有搜索业务中&#xff0c;都有一个…...