运算符重载

✍ dations ◷ 2025-06-10 10:23:33 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 安瑟莫安瑟莫(Anselm,1033年-1109年4月21日),又译安瑟伦,天主教译为安色莫,意大利中世纪哲学家、神学家,1093年至1109年任坎特伯雷大主教。被尊称为最后一位教父与第一位经院哲学学者。运
  • 直辖市直辖市是中华人民共和国的一级行政区单位,与省、自治区同属省级行政区。最早的法律定义,源于1954年通过的《中华人民共和国宪法》的第53条。直辖市并不是地理学意义上的一个城
  • 剁辣椒剁椒是一种的辣椒制品,主要流行于中国湖南、湖北、四川等地。将辣椒剁碎后加入盐和其它配料,密封后经发酵和腌制即可制成剁椒。剁椒可直接佐餐食用,也可用于烹饪剁椒鱼头等菜品
  • 金日成广场坐标:39°01′10″N 125°45′09″E / 39.01953°N 125.75247°E / 39.01953; 125.75247金日成广场(朝鲜语:김일성광장/金日成廣場)是朝鲜民主主义人民共和国首都平壤市的中央广
  • 领土格言以下列表为美国的50个州份,哥伦比亚特区和美国领土的正式格言:
  • 长葛长葛市是中国河南省许昌市下辖的一个县级市。长葛市位于河南省中部,辖境南与建安区接壤,西与禹州市毗邻,北与新郑市、尉氏县交界,东与鄢陵县相连。面积650平方公里,人口77.7万人(2
  • 2010年ATP世界巡回赛总决赛 2010年巴克莱银行ATP世界巡回赛总决赛(2010 Barclays ATP World Tour Finals)于2010年11月21日-11月28日在英国伦敦的O2体育馆举行。上届冠军尼古莱·达维登科未能卫冕此
  • 夜色人生《夜色人生》(英语:,港台译《夜行人生》)是一部于2016年上映的美国犯罪剧情电影,由本·阿弗莱克执导、编剧和监制,剧情改编自丹尼斯·勒翰的2012年同名小说。该片主要讲述美国黑帮
  • 诸冈一羽诸冈一羽(日语:もろおか いちは/いっぱ、天文2年(1533年) - 文禄2年9月8日(1593年10月2日),姓氏也可译作师冈,通称平五郎,又名常成、一巴、一端。日本剑术一羽流的开山始祖,诸冈氏世代
  • 物料物料,指在产品制造过程中,列入生产计划的一切物的总称。按照制造的过程来区分,可包括原料、半成品、成品等等。