运算符重载

✍ dations ◷ 2025-04-24 22:06:17 #多态,计算机编程

在计算机程序设计中,运算符重载(英语: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;}

分类

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

支持运算符重载的语言:

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

相关

  • 几部,就漢字索引來說,是為部首之一,康熙字典214個部首中的第十六個(兩劃的則為第十個)。歸於二劃部首,通常是從外方為部,且無其他部首可用者將部首歸為几部。又读ㄐㄧˇ。 1.古人坐
  • 电子转移电子转移(Electron transfer,ET),是指电子在二个原子或其他化学物质(如分子等)之间的移动。电子转移是一种氧化还原反应,会改变两个反应物的氧化态。许多生物体的机制涉及电子转移
  • 可逆反应可逆反应(英语:reversible reaction)是指通常在同一条件下正反应方向和逆反应方向均能进行的化学反应,例如:生成物变为反应物的速率小到可以忽略的反应则称做不可逆反应。事实上,
  • 一院执政党(38)在野党(37)荷兰政府与政治 系列条目国会一院(荷兰语:Eerste Kamer der Staten-Generaal),或译参议院,是荷兰王国荷兰的最高议会。现拥有75名议员,每四年由12个省的参议会按
  • 神农大帝神农氏(?-?),又称烈山氏,或称连山氏,相传生存年代在夏朝以前,现存文字记载多出现在战国以后。相传“神农尝百草”、教人医疗与农耕,中国人视之为传说中的农业和医药的发明者、守护神,尊
  • 防卫防卫战就军事而言,即指以防守武力阻挡抵抗他方入侵的战争,如:抗战。近现代军事防卫战的发起,并不一定是被动,除了防卫固守外,也包含吓阻用途的预防战争武力建置。防卫战有战略战术
  • 德国黄胡蜂德国黄胡蜂(Vespula germanica)是在大部分北半球地区都能见到的黄蜂,原住于欧洲、北非及亚洲的温带。它们被引入其他地方,如北美洲、澳洲及新西兰。德国黄胡蜂属于胡蜂科,并有时
  • 澳大利亚国旗澳大利亚国旗是蓝船旗的变异:即蓝色旗面,靠旗杆侧上角有英国国旗,靠旗杆侧下部有一颗大型白色七角星——澳大利亚联邦之星;其余部分有四颗较大的白色七角星与一颗较小的白色五角
  • 儒勒·米什莱儒勒·米什莱(英语:Jules Michelet,1798年8月21日-1874年2月9日)是一位法国历史学家,被誉为“法国史学之父”。他以文学风格的语言来撰写历史著作,令人读来兴趣盎然;他以历史学家的
  • 台湾动物路死观察网台湾动物路死观察网(Taiwan Roadkill Observation Network),又称路杀社,是台湾行政院农业委员会特有生物研究保育中心(特生中心)发起的一个公民科学项目。该网站可纪录社员回报的