运算符重载

✍ dations ◷ 2025-12-09 18:47:37 #多态,计算机编程

在计算机程序设计中,运算符重载(英语:operator overloading)是多态的一种。这里,运算符(比如+===)被当作多态函数,它们的行为随着其参数类型的不同而不同。运算符并不一定总是符号。

运算符重载通常只是一种语法糖。它可以简单地通过函数调用来模拟:

a + b * c

在一个支持运算符重载的语言里,上面的写法要比下面的写法有效而简练:

add(a, multiply(b, c))

(假设运算符* 的优先级高于运算符 +)

当一种语言允许运算符在某种情况下被隐式调用的时候,运算符重载将不只提供写法上的方便。例如,Ruby中的to_s运算符就是如此,它返回一个对象的字符串表示。

运算符重载由于使程序员能够根据运算符类型的不同来决定运算符功能的不同而有多样用途。C++中<<的使用就是一个例子。表达式

a << 1

a是整型变量时将返回a的两倍,但是当a是一个输出流时将向这个流中写入“1”。因为运算符重载允许程序员改变运算符通常的语义,慎重使用运算符重载通常被认为是一个好习惯。

以下是C++语言示例:

#include <iostream>using namespace std;class point {public:	int x, y;	point() {		x = y = 0;	}	point(int ix, int iy) {		x = ix;		y = iy;	}	point pointxyadd(point pi) {		return point(x + pi.x, y + pi.y);	}	point operator+(point pi) {		return point(x + pi.x, y + pi.y);	}};int main() {	point p1(5, 10), p2(8, 13), p3, p4;	p3 = p1.pointxyadd(p2);	p4 = p1 + p2;	cout << "p3 = (" << p3.x << ',' << p3.y << ')' << endl;	cout << "p4 = (" << p4.x << ',' << p4.y << ')' << endl;	return 0;}

分类

支持运算符重载和定义新运算符的语言:

支持运算符重载的语言:

不支持运算符重载的语言:

相关

  • 顿河畔罗斯托夫顿河畔罗斯托夫(俄语:Ростов-на-Дону,俄语拉丁字母拼写:Rostov-na-Donu)是俄罗斯罗斯托夫州和南部联邦管区的首府。建于1749年,1807年建市。人口为111万5000人(2015年)
  • 外消旋外消旋混合物(英语:racemic mixture、racemate,或称为 外消旋体)是等物质的量的一对对映体混合后得到的组成物。第一个制得的外消旋体是路易·巴斯德制得的酒石酸的外消旋混合物
  • Brsub2/subO一氧化二溴是一种无机化合物,化学式为Br2O。它是暗棕色固体,仅在-40°C以下稳定,用于溴化反应。分子中Br-O的键长为1.85Å,Br-O-Br的键角为112°。一氧化二溴由溴蒸气或溴的四氯
  • 旗帜旗帜或者旌旗泛指悬挂在杆上的布。旗上面通常绘有图案,具有标志性,用于传达讯息或分类。时至今日,旗帜也用于宣传或纯粹的装饰用。按其形状旗帜分为仿古旗、广告刀旗、锦旗、常
  • 昌都片赣语昌都片,旧称昌靖片,赣语九个方言片之一。主要通行于江西的南昌市、南昌、新建、安义、永修、修水(部分)、德安、星子、都昌、湖口、高安(部分)、奉新(部分)、靖安(部分)、武宁(部分
  • 台视财经台本段时间均以二十四小时制东八区时间(UTC+8)为准。台视财经台,是台湾电视公司(台视)旗下频道之一,于2004年9月1日开播,2014年起陆续在数位有线电视系统上架。收播时间:每星期一03:00
  • 福克斯-阿拉吉安尼氏综合征福克斯-阿拉吉安尼氏综合征(Foix–Alajouanine syndrome),又名福-阿综合征、亚急性坏死性脊髓炎,是一种由脊髓动静脉畸形(英语:arteriovenous malformation)导致的病症。福克斯-阿
  • 让-巴蒂斯特·格勒兹让-巴蒂斯特·格勒兹(法语:Jean-Baptiste Greuze,1725年8月21日-1805年3月4日),18世纪法国画家。与同时代描绘宫廷和神话为主的画家不同,格勒兹关注市民生活,善长风俗画和肖像画。格
  • 钩毛果属钩毛果属(学名:)是茜草科下的一个属,为纤弱草本植物。该属共有两种,一种产自美洲西部,一种(云南钩毛果)产自中国云南。
  • 陈新甲陈新甲(?-1642年),四川长寿人。明末崇祯帝的重臣。因秘密主持与清议和泄露被斩。万历举人,任直隶定州知州。崇祯元年(1628年),入刑部员外郎。崇祯七年九月擢右佥都御史,崇祯十三年官至