运算符重载

✍ dations ◷ 2025-10-18 07:48:59 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 人猿总科猿是灵长目人猿总科(学名:Hominoidea)动物的通称,包括两个科。虽然人们常把猿猴并称,有时候将猴也称为猿,而猿有时也会称做是猴,不过他们在生物学上是不同的动物。两者的主要区别在
  • 智能微尘智能微尘(英语:Smartdust)是一个新的工程概念,目的是让拥有智能的无线传感器缩小成如同约沙粒或尘埃的大小,检测如温度,振动等。每个智能微尘可以是一个无线传感器网络中的节点,
  • [Os(NHsub3/sub)sub4/subsmallLsup1/supLsu二硝酸硝酸根亚硝基四氨合锇是一种配位化合物,化学式为(NO3)2。它可由Cl2经OH−型阴离子交换树脂处理,再与硝酸反应得到。其红外及拉曼谱与晶体结构已被表征,该配合物属于单斜
  • 牛蒡牛蒡(学名:Arctium lappa;greater burdock;gobō (牛蒡/ゴボウ);edible burdock;lappa;beggar's buttons;thorny burr;happy major)是菊科牛蒡属的植物。本种又名东洋参、东洋牛鞭菜、
  • 奥达·伊奥塞里安尼奥达·伊奥塞里安尼(格鲁吉亚语:ოთარ იოსელიანი,俄语:Отар Иоселиани,1934年2月2日-),生于苏联时代的第比利斯,是一位格鲁吉亚裔导演及编剧,现定居法国。
  • 马里亚·福尔图尼马里亚·福尔图尼·马尔萨尔(加泰罗尼亚语:Marià Fortuny i Marsal,加泰罗尼亚语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Seg
  • 1965年苏联经济改革1965年苏联经济改革,有时被称为柯西金改革(俄语:Косыгинская реформа) 或利别尔曼改革,是苏联经济的一系列有计划的变化。 这些改革的核心是引进 盈利能力 和
  • 卡瑞·伍尔卡瑞·伍尔(英语:Kari Samantha Wuhrer,1967年4月28日-)是美国女演员和歌手,饰演电视剧《Sliders》中的Maggie Beckett、电影《八脚怪》中的警长萨曼莎·帕克、游戏《红色警戒2》
  • 糯米糍 (荔枝)糯米糍是荔枝最主要的栽培品种之一,主要栽种于广东省深圳市、台湾台中市等地。其特点是肉厚而多汁、含糖量达15%以上,浓甜如蜜,果皮鲜红,皮薄且核小。著名作家秦牧曾以:“果大、
  • 奥地利内战奥地利内战(Österreichischer Bürgerkrieg),又称二月暴动,发生于1934年2月12日至16日,是为社会主义者发动的暴动以打击保守派势力,主要“战场”位于林茨和维也纳。第一次世界大