运算符的重载

server/2024/9/23 6:27:46/

一、运算符重载的作用

operator是C++的一个关键字,用于重载运算符的行为。所谓的运算符重载,就是使用同一运算符实现不同的计算功能。

默认情况下,你可以直接将两个浮点数相加,却不能直接将两个坐标相加。这时便可应用重载,自己预先写好坐标相加的实现函数,然后就可以像浮点数相加一样使用+号计算两个坐标的相加值。因此,通过重载,可以使+-*/这些运算符应用于用户自定义的数据类型(如类、结构体等)。

除了坐标,还可以让很多东西做加法,比如字符串、复数、向量、矩阵、多项式等。

二、运算符重载的方法

运算符重载实质上是一种特殊的函数重载,只不过这些函数的名字很特别,以“operator运算符”的形式命名,例如,operator+用于重载加法运算符,operator==用于重载等于运算符。如此能让你自己定义的类型看起来和内置类型一样,从而提高代码的可读性和易用性。

当重载一个运算符时,你实际上在告诉编译器:“当这个运算符应用于老子的自定义类型时,得按老子写好的方式执行”。

在C++中,可以通过定义成员函数或全局函数来重载运算符。

下面是一个通过重载+将两个坐标相加的例子:

#include <iostream>
using namespace std;// 自定义的Point类
class Point {
public:int x, y;// 构造函数Point(int x = 0, int y = 0) : x(x), y(y) {}// 重载+运算符,使得两个Point对象可以相加Point operator+(const Point& other) const {return Point(this->x + other.x, this->y + other.y);}// 重载<<运算符,使得Point对象可以输出到ostreamfriend ostream& operator<<(ostream& os, const Point& p);
};// 实现<<运算符的重载
ostream& operator<<(ostream& os, const Point& p) {os << "(" << p.x << ", " << p.y << ")";return os;
}int main() {Point p1(1, 2);Point p2(3, 4);Point p3 = p1 + p2; // 使用重载的+运算符cout << "p1: " << p1 << endl;cout << "p2: " << p2 << endl;cout << "p1 + p2 = " << p3 << endl; // 输出 (4, 6)return 0;
}

上面的代码有些地方可能不是很好懂,但应该可以大致看明白它是怎么实现运算符的重载的。

三、运算符重载的注意事项

1.不是所有运算符都可以被重载,例如.(成员访问)、.*(成员指针访问)、?:(条件)等运算符不能被重载。

2.重载的运算符至少有一个操作数是用户自定义类型:这意味着你不能改变运算符对内置类型操作数的行为。

3.不能创建新的运算符:你只能重载已有的运算符。

4.重载的运算符可以是成员函数或全局函数:如果是成员函数,第一个参数隐式地是*this对象(这时参数数量比操作数少一个);如果是全局函数,需要显式地指定所有参数。


http://www.ppmy.cn/server/48071.html

相关文章

看见更大的Python世界:Python生态系统中的第三方库的安装

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

保利威观看页SDK 官方VUE开源项目 polyv-web-live-watch-sdk

一、安装:node、npm 二、下载源码 polyv-web-live-watch-sdk: 保利威直播观看 SDK 官方文档:保利威帮助中心 进入项目根目录 npm ci #安装依赖,如果 CI 失败,请试一下 npm ci --no-cache --registry=https://registry.npmmirror.com/ npm run dev #启动项目 执行完成后…

Vue随笔记

1 Idea里面使用Vue Idea里面要安装Vue插件 File - New - Project - JavaScript - Vue.js 然后出现&#xff1a; "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js" --ignore-existing --package vue/cli…

Linux.小技巧快捷键

1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中&#xff0c;使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…

lms如何连接测试前端:全面解析与操作指南

lms如何连接测试前端&#xff1a;全面解析与操作指南 在软件开发的世界里&#xff0c;连接学习管理系统&#xff08;LMS&#xff09;与测试前端是一个复杂但至关重要的任务。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;详细解析lms如何连接测试前端&#xff…

探索数据结构:堆,计数,桶,基数排序的分析与模拟实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 堆排序 1.1. 算法思想 堆排序(Heap Sort)是一种基于堆数据结构的排…

网络学习(12)|性能优化与调试:HTTP性能优化与分析

文章目录 HTTP性能优化的常见技巧与策略1. 压缩资源2. 缓存策略3. 内容分发网络&#xff08;CDN&#xff09;4. 图片优化5. 资源合并与分片6. 减少DNS查询7. 使用HTTP/2或HTTP/38. 延迟加载与异步加载 使用网络诊断工具进行HTTP请求分析Chrome开发者工具1. 打开网络面板2. 分析…