运算符重载

✍ dations ◷ 2025-11-30 18:02:27 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 梭杆菌门梭杆菌门(Fusobacteria)是一个小类群的革兰氏阴性细菌。其中梭杆菌属(Fusobacterium)常见于消化道,是口腔菌群之一,也可导致一些疾病。今年10月份,两个研究小组发布了几乎相同的
  • 健那绿B健那绿B(英语:Janus Green B),又名詹纳斯绿B,简称健那绿或詹纳斯绿,是一种对线粒体专一的活体染料,具有脂溶性,能跨过细胞膜,有染色能力的基团带正电,结合在负电性性的线粒体内膜上,内
  • 亚太绿人联盟亚太绿党联盟(Asia-Pacific Green Network, APGC),在2005年2月,13个政党集聚在日本京都宣布成立,是由太平洋地区和亚洲地区各国家的绿党所组成,同时也是全球绿党的一员。
  • 超导性超导体(superconductor),指可以在特定温度以下,呈现电阻为零的导体。零电阻和完全抗磁性是超导体的两个重要特性。超导体电阻转变为零的温度,称为超导临界温度,据此超导材料可以分
  • 软件暗门软件暗门的目的主要是让一般知情的用户使用电脑系统中被隐藏的信息。在软件开发时,设置暗门可以方便用户使用被隐藏、但又设计在电脑系统的某些特定功能。例如某些组织有某些
  • 安全系数安全系数(Factor of safety或是safety factor,简称SF,但通常以FS表示)是指一个结构或是机械所能负荷的负载可以超过预期负载的程度。安全系数为大于等于1的数值,安全系数越高,表示
  • 第五马其顿军团第五马其顿军团(英语:Legio V Macedonica)古罗马军队建制名称。由盖乌斯·维比乌斯·潘撒·凯特洛尼亚努斯(英语:Gaius Vibius Pansa Caetronianus)和奥古斯都(后来的罗马皇帝)等人
  • 唐纳德·艾文森任期 January 8, 1973-January 8, 1991(1944-09-16)1944年9月16日 Minneapolis, Minnesota, U.S.2017年5月19日(2017-05-19)(72岁) North Platte, Nebraska, U.S.Democratictoo
  • 松烟镇 (和顺县)松烟镇 ,是中国山西省晋中市和顺县下辖的一个乡镇级行政单位。松烟镇 (和顺县)共辖以下地区:松烟村、白仁村、寺南坡村、西坡村、东坡村、暧窑村、雷庄村、凤闯村、官家峪村
  • 汤姆克兰西:全境封锁《汤姆克兰西:全境封锁》(英语:)是一款第三人称战术射击动作角色扮演游戏,由Ubisoft Massive、Ubisoft Reflections和Ubisoft Red Storm共同开发,属于汤姆·克兰西系列品牌游戏,支