C++类中的运算符重载过程
为什么要实现运算符重载在 C 中运算符最初是为内置类型如int、double等定义操作方式。当定义一个新的类自定义类型时编译器并不清楚如何对这个新类型的成员变量应用运算符。通过运算符重载程序员可以明确地告诉编译器对于该类的对象运算符如、-、*等应该如何操作其成员变量从而使自定义类型能够像内置类型一样自然地使用这些运算符。1.加法运算符重载作用实现两个自定义类型数据的加法运算在类内实现加法运算符重载123456789101112131415161718192021222324252627282930#include iostreamusingnamespacestd;classPerson {intage;intmoney;public:Person() : money(0), age(0) {}Person(intval,intval2) : age(val), money(val2) {}Person(constPerson other) {this-age other.age;this-money other.money;}// 类内实现重载 本质Person p3p1.operator(p2)Person operator(constPerson other) {Person p;p.age this-age other.age;p.money this-money other.money;returnp;// 不以引用返回是因为在执行完这个函数后p会被销毁以值传递会调用拷贝构造}voidprint() { cout age money endl; }};intmain() {Person a(18, 50);// 括号法Person b {12, 50};// 隐式转换法Person c a b;c.print();return0;}实现加法运算符重载的operator函数来完成的传入的参数为const Person other的原因有以下的两点1.以引用的方式传递是为了防止调用拷贝构造2.加const修饰是为了防止修改实参在函数中声明了一个Person的对象p返回值是以值的形式返回因为值返回会调用拷贝构造如果是以引用的方式传递当这个函数结束时对象p就会被销毁掉。在类外实现加法运算符重载123456789101112131415161718192021222324252627282930#include iostreamusingnamespacestd;classPerson {intage;intmoney;friendPerson operator(constPerson other1,constPerson other2);public:Person() : money(0), age(0) {}Person(intval,intval2) : age(val), money(val2) {}Person(constPerson other) {this-age other.age;this-money other.money;}voidprint() { cout age money endl; }};// 类外实现重载 本质Person p3operator(p1,p2)Person operator(constPerson other1,constPerson other2) {Person p;p.age other1.age other2.age;p.money other1.money other2.money;returnp;}intmain() {Person a(18, 50);// 括号法Person b {12, 50};// 隐式转换法Person c a b;c.print();return0;}在类外实现加法运算符重载相当于类外函数访问类内的成员变量所以要将这个函数在类中声明为友元函数friend。其他的跟在类内实现加法运算符重载是一样的。本质在类内实现加法运算符重载的本质是Person p3p1.operator(p2在类外实现加法运算符重载的本质是Person p3operator(p1,p2)因为一个是通过对象去调用这个函数它本身也算是一个参数所以只需要传人一个参数。而在类外则是相当于直接调用这个函数所以传入的参数是两个。无论是再类内还是在类外实现加法运算符重载最后调用的方式都是。2.左移运算符重载作用可以输出自定义数据类型要在类外实现因为在类内的话调用格式为对象.operator();无法达到cout123456789101112131415161718192021222324252627282930#include iostreamusingnamespacestd;classPerson {intage;intmoney;public:friendostream operator(ostream o,constPerson p);Person() : age(0), money(0) {}Person(intval,intval2) : age(val), money(val2) {}Person(constPerson other) {cout 调用拷贝构造;this-age other.age;this-money other.money;}// 一般不在函数内进行左移重载/*void operator(ostream cout,const Person p) {}*/};// 类外实现左移运算符重载ostream operator(ostream o,constPerson p) {o p.age p.money endl;returno;}intmain() {Person a(5, 12), b;cout a b endl;return0;}因为是在类外实现的所以在类内要将其设置为友元函数。参数为两个一个为ostream类型的o另外一个为引用类型的对象。返回值为引用类型的ostream类型的ostream因为如果想要进行连续的输出就必须让前一个的结果作为第二个左移运算符的第一个参数如下图在op.age的返回值为o然后它与后面就变成了o 接着又调用这个运算符这样才能完成连续的输出。3.递增运算符重载递增分为两种一种是前一种是后。前是在使用之前就让这个数加1返回的是加1之后的结果。而后是先返回这个数再进行加一操作。前返回的是引用后返回的是值。12345678910111213141516171819202122232425262728293031323334#include iostreamusingnamespacestd;classPerson {intage;intmoney;public:Person() : age(0), money(0) {}Person(intval,intval2) : age(val), money(val2) {}Person(constPerson other) {this-age other.age;this-money other.money;}// 前置的重载 返回引用Person operator() {// 保证是对一个数进行this-age;this-money;return*this;}// 后置的重载 加一个int参数占位符区分 返回值Person operator(int) {Person temp *this;// 用一个局部变量返回之前的结果this-age;this-money;returntemp;}voidprint() { cout age money; }};intmain() {Person p(5, 12);p;p.print();return0;}对前和后都是operator所以为了区分对于后来说需要加一个参数占位符来进行区分。在返回值这块前返回的是引用因为要的是它进行加一之后的结果所以可以直接返回这个对象。而后则返回的是一个值因为要返回的是它加一之前的结果所以需要一个局部变量返回之前的结果。

相关新闻

Remmina远程桌面工具深度解析:高效跨平台连接解决方案实战指南

Remmina远程桌面工具深度解析:高效跨平台连接解决方案实战指南

Remmina远程桌面工具深度解析:高效跨平台连接解决方案实战指南 【免费下载链接】Remmina Mirror of https://gitlab.com/Remmina/Remmina The GTK Remmina Remote Desktop Client 项目地址: https://gitcode.com/gh_mirrors/re/Remmina Remmina作为Linux平台…

2026/7/28 3:45:01 阅读更多 →
2026年MBA论文写作必备:9款AI工具实测与避坑指南

2026年MBA论文写作必备:9款AI工具实测与避坑指南

1. 项目背景与核心价值作为一名经历过MBA备考的过来人,我深刻理解在论文写作、商业分析、数据建模等环节中,如何有效降低AI检测率(即提升内容原创性)是每位商学院学生必须面对的挑战。2026年MBA申请季即将到来,市面上各…

2026/7/28 3:44:01 阅读更多 →
TPIC7710EVM评估模块:快速验证汽车电子ASIC功能的软硬件平台

TPIC7710EVM评估模块:快速验证汽车电子ASIC功能的软硬件平台

1. 项目概述与EVM的核心价值在汽车电子,特别是车身控制和安全系统领域,一个新芯片的选型与验证往往是项目成败的关键第一步。工程师们拿到一颗功能强大的专用集成电路(ASIC)时,面对密密麻麻的数据手册和复杂的寄存器配…

2026/7/28 3:44:01 阅读更多 →

最新新闻

LabVIEW与Arduino串口通信控制PWM呼吸灯:从原理到实践

LabVIEW与Arduino串口通信控制PWM呼吸灯:从原理到实践

1. 项目概述与核心价值最近在整理一些给新同事的培训材料,发现很多刚接触LabVIEW和嵌入式开发的朋友,对于如何将图形化编程的便捷性与硬件的实时控制能力结合起来,总感觉隔着一层窗户纸。今天我就以最经典的“呼吸灯”实验为例,掰…

2026/7/28 3:56:05 阅读更多 →
Python OpenCV摄像头编程实战:从基础拍照到智能监控应用

Python OpenCV摄像头编程实战:从基础拍照到智能监控应用

1. 项目概述:从“看见”到“记录”的智能跨越“GDW|慧眼开启——使用摄像头拍照”这个项目,听起来简单直接,但其背后蕴含的,是从一个被动的“观看”设备,到一个主动的“记录”与“感知”工具的转变。对于很多刚接触硬件…

2026/7/28 3:56:05 阅读更多 →
如何快速搭建专业响应式网站:Bootstrap 5终极指南

如何快速搭建专业响应式网站:Bootstrap 5终极指南

如何快速搭建专业响应式网站:Bootstrap 5终极指南 【免费下载链接】bootstrap The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web. 项目地址: https://gitcode.com/GitHub_Trending/bo/bootstr…

2026/7/28 3:56:05 阅读更多 →
用行空板打造西游记互动舞台剧:从图形化编程到项目制学习实践

用行空板打造西游记互动舞台剧:从图形化编程到项目制学习实践

1. 项目缘起:从“Hello World”到“西游大戏”如果你刚拿到行空板,跟着教程点亮了LED,或者让屏幕显示了一句“Hello World”,心里可能会有点嘀咕:这玩意儿除了跑跑这些基础例程,到底还能干点啥“大”的&…

2026/7/28 3:56:05 阅读更多 →
Obsidian Zettelkasten终极指南:30个免费模板构建你的第二大脑知识管理系统

Obsidian Zettelkasten终极指南:30个免费模板构建你的第二大脑知识管理系统

Obsidian Zettelkasten终极指南:30个免费模板构建你的第二大脑知识管理系统 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitcod…

2026/7/28 3:56:05 阅读更多 →
回溯算法实战:组合总和III的解题与优化

回溯算法实战:组合总和III的解题与优化

1. 问题背景与题目解析力扣第216题"组合总和 III"是回溯算法中的经典题型,要求找出所有k个不同数字的组合,这些组合的和等于n,且满足以下条件:只使用数字1到9每个数字最多使用一次组合中不能有重复的数字集合这个题目在…

2026/7/28 3:55:04 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻