运算符重载

✍ dations ◷ 2025-12-09 12:48:20 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 肚脐、脐,俗称肚脐眼,中医称之为“神阙”,从本质上来说是胎儿出生后,脐带脱落后留下的疤痕。肚脐位于髂前上棘水平的腹部正中线上,直径约为1.0至2.0公分。它通常可以是一个小凹陷
  • 头疼头痛,又叫头疼(英语:headache),是一种在头部、颈部或肩膊以上位置发生的局部疼痛。许多头部和颈部问题的症状都是头痛。头痛表现种类繁多,可能是偏头痛、紧缩型头痛(英语:tension-ty
  • LDAP轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息
  • 11-β11β-羟基类固醇脱氢酶(HSD-11β或11β-HSD)是一类催化惰性十一酮产物(可的松)转化为活性的皮质醇或其逆反应的酶,从而调节糖皮质激素进入类固醇受体的途径:因此,这种酶的两种底物
  • 南通话南通话通行于江苏省南通市市区和通州区中西部。地处北方方言和吴语的交界地带,语音和词汇上都有着北方话和吴语的双重特色,对于它属于官话还是吴语,有过不少争议。因为南通话中
  • 2005年6月逝世人物列表2005年逝世人物列表:1月 - 2月 - 3月 - 4月 - 5月 - 6月 - 7月 - 8月 - 9月 - 10月 - 11月 - 12月下面是2005年12月逝世的知名人士列表:
  • 亚扎丁坚亚扎丁坚(缅甸语:ရာဇသင်္ကြန်,发音:),旧译阿剌者僧加蓝,是缅甸敏象王国的君主,与其兄阿丁克亚、弟底哈都共同创建了敏象王国。亚扎丁坚是掸族人,与兄弟共同在蒲甘王国军中
  • 伦纳德·伍利伦德纳·伍利(英语:Leonard Woolley 1880年4月17日-1960年2月20日)英国考古学家,以发掘美索不达米亚的乌尔而知名,伍利被视作现代首位考古学家之一,1935年因在考古学上的贡献而获
  • 王发越王发越(1794年-1858年),字英斋,号兰溪,山西黎城县人,清朝政治人物。同进士出身。道光六年(1826年),登进士,历山东清平县、巨野县、历城县知县,高唐州知州。道光二十年,擢云南曲靖府知府、
  • 梓潼镇梓潼镇,是中华人民共和国四川省成都市崇州市下辖的一个乡镇级行政单位。2019年12月,撤销梓潼镇,将其所属行政区域划归观胜镇管辖。梓潼镇下辖以下地区:兴裕社区、真武村、天府村