运算符重载

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

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

分类

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

支持运算符重载的语言:

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

相关

  • CD562E3V, 2HAZ, 2VKW, 2VKX, 3MTR· extracellular region · plasma membrane · external side of plasma membrane · cell surface · integral to membrane · axon
  • 同文馆京师同文馆,清末自强运动期间中国政府官办的外语人才学校,以教授西方语言为主的官办教育机构,也是中国近代最早成立的新式教育机构。京师同文馆成立于1862年8月24日,1900年停办,1
  • 莫扎特沃尔夫冈·阿马德乌斯·莫扎特(德语:Wolfgang Amadeus Mozart,1756年1月27日-1791年12月5日),古典时期的作曲家及钢琴家。莫扎特是位多产的作曲家,一生创作了600多部作品,几乎涵盖所
  • 再结晶重结晶(英语:Recrystallization),再结晶,晶种结晶法,也称之为优先结晶法;是一种物理过程,在化学、冶金学和地质学中有很不同的用途。重结晶是将物质溶于溶剂或熔融后,又重新从溶液或
  • 周其凤周其凤(1947年11月20日-),湖南浏阳人,中国大陆化学学者,中国科学院院士,曾任北京大学、吉林大学校长。主要从事高分子合成及液晶高分子方面的研究。1947年11月20日(农历十月初八)生于
  • 蛙生蛙粪霉蛙生蛙粪霉(学名:Basidiobolus ranarum)是属于虫霉目蛙粪霉科蛙粪霉属的一种真菌,腐生在青蛙等两栖动物及爬行动物的粪便或土壤等基物上。该种分布于中国、印度尼西亚、非洲、美
  • 一国一城令一国一城令是日本在元和元年(1615年)闰6月13日由江户幕府所发布的命令。在一国(此处的“国”是指令制国,或大名的领国(之后的藩))中,由大名所居住作为政厅所在的城只能保留一个,其余
  • 比拉河坐标:48°58′48″N 131°41′02″E / 48.98000°N 131.68389°E / 48.98000; 131.68389比拉河(俄语:Бира),是俄罗斯的河流,位于该国东南部犹太自治州,属于黑龙江的支流,河道全
  • 王梓材王梓材(1792年-1851年),初名梓,字楚材,后更字梓材,以字行。浙江鄞县(今浙江宁波)人。祖父王锷,父王谟,皆秀才出身。世居鄞西柳庄坊。道光十四年(1834年)优贡,隔年考取八旗教习。道光十八年
  • 卡尔克西乡坐标:58°6′57″N 25°35′2″E / 58.11583°N 25.58389°E / 58.11583; 25.58389卡尔克西乡(爱沙尼亚语:Karksi vald),是爱沙尼亚的一个乡,位于该国南部,由维尔扬迪县负责管辖,首