运算符重载

✍ dations ◷ 2025-12-04 11:55:47 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 俗语俗语就是惯用语,指约定俗成,广泛流行于某时某地的口语。从广义来看,俗语包括谚语、歇后语(引注语)、常用的成语,但不包括并不通俗和古雅书面语中的成语,或名著中的名言警句;从狭义来
  • 个人网站个人网站是指由个人或团体、工作室(一般不超过3人)根据自己的兴趣爱好或价值取向,为了展示自我、与人交流,以非盈利为目的而在网络上创建的供其他人浏览的网站。在 WWW 刚开始流
  • 卡拉季奇武克·斯特凡诺维奇·卡拉季奇(塞尔维亚语西里尔字母:Вук Стефановић Караџић,塞尔维亚语拉丁字母:Vuk Stefanović Karadžić,发音:.mw-parser-output .IPA
  • 玛尔特·戈蒂耶玛尔特·戈蒂耶(Marthe Gautier,1925年9月10日-)是一位法国医生,同时也是一位研究人员,正是她发现了21三体综合征(唐氏综合征)的病因。这个发现长期被归功于Jerome Lejeune,但现在科
  • 信息系统局中国人民解放军军徽中央军委装备发展部信息系统局,位于北京市,是中央军事委员会装备发展部下属局,负责该部信息系统工作。1998年,中国人民解放军总装备部成立,下设中国人民解放军
  • 第一阶段削减战略武器条约削减战略武器条约(Strategic Arms Reduction Treaty, START)是由美国和苏联之间签署的旨在削减并限制战略性进攻武器的一份条约。由于美国与苏联继任体俄罗斯联邦在1993年又签
  • 2002年被中华人民共和国处决的死刑犯列表2002年被中华人民共和国处决的死刑犯列表,旨在列出2002年被中华人民共和国处决的死刑犯。
  • 蔚州关帝庙蔚州关帝庙,位于中国河北省张家口市城南关,为张家口市蔚县的一个省级文物保护单位,类型为古建筑,公布时间为1993年7月15日。蔚州关帝庙的历史年代为明代。
  • 冠军欧洲《冠军欧洲》是中国中央电视台体育频道(CCTV-5)的一档专题节目,2008年开播,每年欧洲冠军联赛期间播出。《冠军欧洲》播出时间不固定,但都在北京时间比赛日当晚现场直播,播出时长一
  • 丰昇额丰昇额(满语:ᡶᡝᠩᡧᡝᠩᡤᡝ,穆麟德:,太清:;?-1777年),钮祜禄氏,满洲正白旗人,清朝军事将领、清朝兵部尚书、户部尚书。丰昇额自三等侍卫袭父阿里衮封一等公,擢领侍卫内大臣,署兵部尚书、