运算符重载

✍ dations ◷ 2025-07-01 09:21: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;}

分类

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

支持运算符重载的语言:

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

相关

  • 马蒂亚斯·雅各布·施莱登马蒂亚斯·雅各布·施莱登(Matthias Jakob Schleiden,1804年4月5日-1881年6月23日)是一位德国植物学家,细胞学说的建立者之一。他出生于德国汉堡,大学时原本研读法律,但后来转向其
  • 下目亚目(suborder)是生物分类法中的一级,一般是界于目和科之间,但有时亚目和科之间会再分下目(又译作次目)。亚目的拉丁文名称较无固定的字尾。下目(infra-order),又译作次目是生物分类
  • 拉斯科洞窟拉斯科洞窟(法语:Grotte de Lascaux)壁画,位于法国多尔多涅省蒙特涅克村的韦泽尔峡谷,是著名的石器时代洞穴壁画。1979年,拉斯科洞窟同韦泽尔峡谷内的许多洞穴壁画一起被选为世界
  • 焊接焊接(英语:Welding),或称焊接、熔接、镕接,是一种以加热或加压方式接合金属或其他热塑性塑料的工艺及技术。焊接透过下列三种途径达成接合的目的:依具体的焊接工艺,焊接可细分为气
  • 林森南路林森南路,是台湾台北市南北向主要道路之一,原为上海路及沈阳路,位于台北市的中正区。林森南路属双向道路,每向二至三线道,不分段,北接林森北路,南接南海路,并以地下道穿越中正纪念堂
  • 儿童人权儿童人权(英文:Children's rights),指的是儿童享有的各项权利,是人权的一部分。儿童人权着重强调对未成年人的特别保护及关爱。1989年联合国签署的《儿童权利公约》中将“儿童”
  • 基督教堂学院牛津大学基督堂学院(英语:Christ Church,拉丁语:Ædes Christi)是英国牛津大学最大的学院之一,它也是世界上唯一一个同时也是主教座堂的学院,基督堂座堂是牛津教区的座堂。基督堂学
  • 亚兹德省亚兹德省(波斯语:یزد)是伊朗三十一个省份之一。面积129,285平方公里,在伊朗所有省份中位列第七。根据1996年的人口普查结果,亚兹德省人口为750,769 ,其中75.1 %为城镇居民,24.9
  • 马哈努鲁区马哈努鲁区(马达加斯加语:Mahanoro),是马达加斯加的行政区,位于该国东部,由阿齐那那那区负责管辖,首府设于马哈努鲁,面积3,968平方公里,2011年人口225,954,人口密度每平方公里57人。
  • 科内尔·萨拉塔科内尔·萨拉塔(斯洛伐克语:Kornel Saláta;1985年2月24日-)是一位斯洛伐克足球运动员。在场上的位置是中后卫。他现在效力于斯洛伐克足球甲级联赛球队布拉迪斯拉发斯洛万体育会