运算符重载

✍ dations ◷ 2025-12-01 08:59:10 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • Sirius可视化软件Sirius可视化软件(简称Sirius)是圣地亚哥超级计算机中心(San Diego Supercomputer Center)所开发的一个分子建模与分析系统。Sirius设计旨在支持除简单显示小分子和蛋白质的之外
  • 对称性破缺对称性破缺(symmetry breaking)系指物理学里,在具有某种对称性的物理系统之临界点附近发生的微小振荡,通过选择所有可能分岔中的一个分岔,打破了这物理系统的对称性,并且决定了这
  • 斯坦尼斯拉斯广场坐标:48°41′38″N 6°10′59″E / 48.69389°N 6.18306°E / 48.69389; 6.18306斯坦尼斯拉斯广场(Place Stanislas)是法国洛林大区城市南锡的一个大型的行人广场。1983年,斯坦
  • 奇异原子列表奇异原子通常是指与一般原子构成不同的原子,普通的原子是由电子e、质子p和中子n这三种长寿的粒子构成,但奇异原子却是以其他的粒子代替这三种稳定粒子中的一个或多个,通过电磁
  • 蝙蝠携带的病毒蝙蝠携带的病毒是指以蝙蝠为主要储蓄宿主、能够传染到其他生物的病毒,包括冠状病毒、汉坦病毒、亨尼巴病毒、狂犬病毒、埃博拉病毒等。蝙蝠携带的病毒可以经由其唾液传播,唾液
  • 矿产资源矿产资源,是指由地质作用形成的,具有利用价值的,有固态、液态和气态的自然资源。矿产的形成作用一般有:
  • 东河 (佛罗里达州)东河(英语:East River)是一条长约10-英里(16-千米)的河流,位于美国佛罗里达州沃库拉县,在圣马克国家自然保护区汇入圣马克河,最终流入墨西哥湾。
  • 透辉石透辉石(Diopside)是中常见的一种辉石,透辉石是一种天然的钙镁硅酸盐,透辉石外观呈灰白色,加热后洁白,是烧制陶瓷的一种原料,透辉石一字源自两个希腊字,分别是“双倍”(Di) 和“影
  • 母与子 (消歧义)母与子也可以指:
  • D.I.PD.I.P(韩语:디아이피),是韩国Inter BD娱乐于2016年推出的六人男子组合,成员包括胜湖、洙民、B.Nish、柳迥、太河及Z.One。 出道前 2016年2017年