C/C++编程笔记:C++中的运算符重载
myzbx 2025-06-18 23:01 16 浏览
在C ++中,我们可以使运算符为用户定义的类工作。这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载。
例如,我们可以在String之类的类中重载运算符'+',以便仅使用+就可以连接两个字符串。
算术运算符可能会重载的其他示例类是复数,小数,大整数等。
一个简单而完整的例子
#include<iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}
// This is automatically called when '+' is used with
// between two Complex objects
Complex operator + (Complex const &obj) {
Complex res;
res.real = real + obj.real;
res.imag = imag + obj.imag;
return res;
}
void print() { cout << real << " + i" << imag << endl; }
};
int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2; // An example call to "operator+"
c3.print();
}
输出:
12 + i9
运算符功能和普通功能有什么区别?
运算符功能与普通功能相同。唯一的区别是,运算符的名称始终是运算符关键字,后跟运算符的符号,并且在使用相应的运算符时会调用运算符功能。
以下是全局运算符功能的示例:
#include<iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}
void print() { cout << real << " + i" << imag << endl; }
// The global operator function is made friend of this class so
// that it can access private members
friend Complex operator + (Complex const &, Complex const &);
};
Complex operator + (Complex const &c1, Complex const &c2)
{
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2; // An example call to "operator+"
c3.print();
return 0;
}
我们可以让所有运算符超负荷吗?
除了少数运算符之外,几乎所有运算符都可以重载。以下是不能重载的运算符的列表。
。(点运算符) :: ?: 大小
关于运算符重载的要点
1)为了使运算符重载起作用,至少一个操作数必须是用户定义的类对象。
2) 赋值运算符:编译器会自动为每个类创建一个默认的赋值运算符。默认的赋值运算符确实将右侧的所有成员分配到左侧,并且在大多数情况下都可以正常工作(此行为与复制构造函数相同)。
3) 转换运算符:我们还可以编写可用于将一种类型转换为另一种类型的转换运算符。
#include <iostream>
using namespace std;
class Fraction
{
int num, den;
public:
Fraction(int n, int d) { num = n; den = d; }
// conversion operator: return float value of fraction
operator float() const {
return float(num) / float(den);
}
};
int main() {
Fraction f(2, 5);
float val = f;
cout << val;
return 0;
}
输出:
0.4
重载的转换运算符必须是成员方法。其他运算符可以是成员方法或全局方法。
4)任何可以用单个参数调用的构造函数都可以用作转换构造函数,这意味着它也可以用于隐式转换为正在构造的类。
#include<iostream>
using namespace std;
class Point
{
private:
int x, y;
public:
Point(int i = 0, int j = 0) {
x = i; y = j;
}
void print() {
cout << endl << " x = " << x << ", y = " << y;
}
};
int main() {
Point t(20, 20);
t.print();
t = 30; // Member x of t becomes 30
t.print();
return 0;
}
输出:
x = 20,y = 20 x = 30,y = 0
我们很快将讨论一些重要运算符的重载,欢迎持续关注~
以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~
另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
编程学习书籍分享:
编程学习视频分享:
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
点击下方【了解更多】获取更多学习资料帮助你学习成长哦~
相关推荐
- IT之家学院:如何修改Win10 Edge浏览器下载路径?
-
IT之家讯目前Win10Edge浏览器的默认下载路径不可修改,只能是系统“下载”文件夹,虽然用户可以通过移动该文件夹位置来间接达到修改目的,但Edge浏览器本身却无法修改。不过我们可以通过修改注册表...
- Win 10自带Edge浏览器史上最强,好内核配了滥界面
-
微软在Win10上为我们带来了全新的Edge浏览器,而跌落神坛的IE正式被微软抛弃!随着Win10周年版更新的到来,Edge浏览器也带来了很多全新的特性,功能也更加完善!这让微软信心大增,微软甚...
- Win10全新浏览器Microsoft Edge图标:致敬IE
-
IT之家讯今天早些时候,微软宣布了斯巴达(Spartan)浏览器项目的官方命名,微软在Windows10上集成的新浏览器的内核名为Edge,所以大家一定猜到了,它被命名为MicrosoftEdge...
- Edge 84稳定版发布:优化集锦 默认禁用TLS 1.0/1.1
-
时隔6周时间,Edge浏览器的最新稳定版v84.0.522.40正式发布。新版本为IE模式改善了站点列表下载时间,在“以管理员身份运行”运行时允许用户登录浏览器等等。下载地址:https...
- 真相:Win10微软Edge和IE11浏览器图标相似的原因
-
IT之家讯5月7日消息,微软在Build2015大会上公布了Win10斯巴达浏览器的正式名称“MicrosoftEdge”以及正式图标,蓝色的“e”。这款新浏览器的图标让各位Windows老用户...
- 微软 Win11,20 多年来首个没有 IE 浏览器的 Windows 版本
-
IT之家6月26日消息在Windows10的生命周期中,你可能已经安装了IE浏览器、微软Edge的经典版本,以及新的Chromium驱动的Edge浏览器。这三个浏览器完...
- 微软宣布2022年6月15日停止支持IE浏览器:已推出25年
-
5月20日消息,在推出25年之后,微软最终决定于明年停止对IE浏览器的支持。多年来,这款网络浏览器基本上没有太多消费者使用,为此微软定于2022年6月15日完全停止对其支持,转...
- 我采访了一位 Pornhub 工程师,聊了这些纯纯的话题
-
成人网站在推动Web发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用WebSocket推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在Web技术创...
- 如何在 Microsoft Edge 中使用IE浏览器
-
随着微软Windows10,Windows11的推出,IE浏览器逐渐被抛弃,可是国内一些银行和政府网站还必须使用IE才能访问,下面我来解决这个问题。首先在MicrosoftEdge中启用IE模式...
- IE浏览器无法加载网站时将自动跳转到Edge中打开
-
来源:cnBeta.COM目前微软已经将开发重心放在基于Chromium的新版Edge浏览器上,而传统的InternetExplorer则逐渐被淘汰。也就是说,如果你当前使用的是IE...
- 告诉你手机信号栏中E、H、T都是什么意思!
-
手机信号经常会出现E啊,H啊,T啊……之类的字母,每次出现的时候小编都会自动关机,觉得手机坏掉了……ORZ……那么这些字母具体表示些什么意思呢?如果是G,那么代表的是GPRS,指2.5G网络,此时网速...
- 比Chrome更适合国人用 Chromium版Edge横空出世
-
编辑微软终于正式发布Chromium内核的Edge浏览器了。这意味着微软放弃了自研浏览器内核,Windows自带浏览器也成为了Chrome的马甲。关于微软为什么要这么做,笔者曾经撰文分析,大家可以点...
- Microsoft 新浏览器 Edge 将不再支持 ActiveX、VBScript 技术
-
Microsoft继宣布将推出将取代IE的全新浏览器Edge后,日前又再宣布Edge不会支持沿用以久的ActiveX、VBScript与BrowerHelperObjects(...
- 隐藏功能超炫酷 新版Edge浏览器还能这么玩
-
基于Chromium的新版Edge浏览器已经开放测试,但由于是测试期,可供用户选择的功能还比较少。不过有一部分功能已经内置到浏览器中,只是尚未开放而已。这就像汽车里的刷EPU一样,没事自己玩一玩,也是...
- 微软推出的新版Edge浏览器,让我抛弃用了5年的谷歌
-
随着新版Edge浏览器的发布,这个微软的亲儿子以崭新的面貌和大家见面啦。这次更新可谓是好评如潮,相比浏览器届的老大哥——谷歌浏览器,它少了些臃肿,但又多了一些独特的功能。今天,我就为大家介绍8...
- 一周热门
- 最近发表
-
- IT之家学院:如何修改Win10 Edge浏览器下载路径?
- Win 10自带Edge浏览器史上最强,好内核配了滥界面
- Win10全新浏览器Microsoft Edge图标:致敬IE
- Edge 84稳定版发布:优化集锦 默认禁用TLS 1.0/1.1
- 真相:Win10微软Edge和IE11浏览器图标相似的原因
- 微软 Win11,20 多年来首个没有 IE 浏览器的 Windows 版本
- 微软宣布2022年6月15日停止支持IE浏览器:已推出25年
- 我采访了一位 Pornhub 工程师,聊了这些纯纯的话题
- 如何在 Microsoft Edge 中使用IE浏览器
- IE浏览器无法加载网站时将自动跳转到Edge中打开
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)