运算符重载

✍ dations ◷ 2025-11-25 08:14:29 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 阿扎瓦德民族解放运动阿扎瓦德民族解放运动(阿拉伯语:الحركة الوطنية لتحرير أزواد‎,法语:Mouvement National pour la Libération de l'Azawad,简称MNLA),以前的名称是阿扎
  • 查理九世查理九世(Charles IX,原名:查理-马克西米利昂 Charles-Maximilien,1550年6月27日-1574年5月30日)法国瓦卢瓦王朝国王(1560年-1574年在位)。亨利二世与凯瑟琳·德·麦第奇之子,生于巴黎
  • 卡尼期卡尼期(英语:Carnian)是三叠纪的第五个时期,年代大约位于237–227百万年前。
  • 江户幕府将军一览江户幕府将军列表中列出日本江户幕府时期,德川氏十五任征夷大将军的列表。德川家的将军除了秀忠以外,在就任同时都会一并得到源氏长者的称号,死后也会追赠正一位的地位。15位将
  • 希腊裔美国人1,390,439-3,000,000希腊裔美国人(英语:Greek American,希腊语:Ελληνοαμερικανοί, Ellinoamerikani),指具有希腊血统的美国人。按照2007年美国人口调查局估计, 美
  • 来自伊苏的冒险者《来自伊苏的冒险者》(日语:WANDERERS FROM Ys,后续版本正式称游戏“伊苏III”)是日本Falcom出品的动作角色扮演游戏,1989年在日本PC-8801个人电脑首发。游戏是伊苏系列的第三部
  • 228省道 (浙江)S228省道又称云寿线,是中国浙江省省道之一,原编号52省道。S228省道路线的起点是云和县云和镇,与S328省道相接,至泰顺县城罗阳镇与福建省S202省道相接,通向寿宁县,故又称云寿线,是
  • 李登瀛 (康熙壬辰进士)李登瀛(1656年-1730年),字俊升、天山,号梅溪,祖籍河北沧州,浙江绍兴府山阴县人,清朝政治人物。早年入钱国安府幕僚。康熙四十七年,中举;康熙五十一年,登进士,充任武英殿纂修,后升任内阁中
  • 标准模型 (密码学)在密码学中,标准模型(Standard model) 是建立在对手使用有限的时间与运算力前提下的计算模型,也可称作裸模型或普通模型。密码方案通常基于复杂度假设,其中提出了一些问题,如因
  • 刘家台乡刘家台乡,是中华人民共和国河北省保定市满城区下辖的一个乡镇级行政单位。刘家台乡下辖以下地区:刘家台村、东高士庄村、西高士庄村、白沙村、长角台村、慈家台村、车厂村、龙