运算符重载

✍ dations ◷ 2025-07-21 22:56:26 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 主谓短语在汉语句法中,主谓短语是短语的结构分类之一,它由两个成分组成。前一个成分的功能是提出主题,称为主语;后一个成分对主题加以陈述,称为谓语。主语和谓语构成了主谓关系(或主述关系
  • 克里斯塔利娜·格奥尔基耶娃克里斯塔利娜·伊万诺瓦·格奥尔基耶娃-基诺瓦(保加利亚语:Кристалина Иванова Георгиева-Кинова;1953年8月13日-),保加利亚籍女性经济学家、银
  • 晨间厨房晨间厨房(英语:La Morning),是一个起源于台湾屏东县的连锁早餐店品牌。成立于2000年,创办人为黄义升、邱明正。目前全台约有400家加盟门市,中国约有40家门市。
  • 汉高公司汉高公司(德语:Henkel KGaA)是一家德国公司,成立于1876年,总部在德国杜塞尔多夫,主营化工产品,包括洗涤剂和清洁剂、化妆品和护肤品、接着剂和密封胶等。旗下主要品牌有宝滢Persil,
  • 仁粹大妃 (电视剧)JTBC、Drama House《仁粹大妃》(韩语:인수대비)是韩国JTBC自2011年12月3日起播出的周末特别企划连续剧。讲述朝鲜文宗至燕山君时代的人物,朝鲜成宗生母仁粹大妃的一生。
  • 大卫·麦考米克大卫·H·麦考米克(David H. McCormick;1965年-)是美国的一位商人。他是桥水资产管理公司的总裁,并且曾经担任美国国际财政事务部副部长。麦考米克毕业于西点军校。
  • 劳动党 (韩国)2008年3月16日 (2008-03-16)(进歩新党) 劳动党是韩国的一个左翼社会主义政党。在新进步党、社会党合并之后,它的名字改为劳动党(不同于朝鲜劳动党)。 它于2013年7月21日举行了
  • 帕维尔·戴维帕维尔·戴维(捷克语:Pavol Dávid,1899年3月19日-1970年12月5日),捷克斯洛伐克共产党中央政治局委员、中央书记处书记,捷克斯洛伐克共产党斯大林派的支持者。1899年,出生。1952年,为
  • 油葱粿油葱粿,又称九层炊,是台湾常见的稻米食品,外观与萝卜糕有几分相似,但使用材料与制作方式皆略有不同。油葱粿使用的米浆为系将在来米、蓬莱米磨成粉,加上适量的太白粉与水调制而成
  • 莱特号航空母舰莱特号航空母舰(USS Wright,CVL-49),是美国海军两艘塞班岛级航空母舰的2号舰。在二战期间建造,由巡洋舰舰体改建而成,后期因美国海军更大吨位的航母过多而再度改装成指挥舰 CC-2。