运算符重载

✍ dations ◷ 2025-11-19 16:42:55 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 议会民主制议会制又称内阁制、议会民主制(英语:Parliamentary system),是一种政治制度,特点是“议会无上”,政府首脑(总理或首相)权力来自议会,授权有两种途径:第一是议会改选后的多数议席支持,第
  • myocardial infarction心肌梗死(Myocardial infarction简称MI、Acute myocardial infarction简称AMI),旧称心肌梗塞,是一种急性及严重的心脏状态。其成因是部分心肌的血液循环突然中断,心肌因无法得到
  • 赤道面天球赤道是在天球上的一个大圆,它与地球的赤道是同一个平面。换言之,天球赤道是地球赤道在天球上的投影。相同的结果是地球的轨道倾角,使天球的赤道相对于黄道平面倾斜约23.5°
  • 排名世界第八位的大都会区
  • 十七酸十七酸(Heptadecanoic acid)又称珠光脂酸,分子式CH3(CH2)15COOH。不饱和脂肪酸
  • 安东尼奥·维瓦尔第安东尼奥·卢奇奥·维瓦尔第(意大利语:Antonio Lucio Vivaldi,1678年3月4日-1741年7月28日),昵称(红发神父),是一位出生于威尼斯的意大利神父和巴洛克音乐作曲家,同时还是一名大师级小
  • 鹮科鹮科(学名:Threskiornithidae,“鹮”读音可同“悬”或同“环”),别名朱鹭科,属于鹈形目,全世界共有34种。共分两个亚科,34个种。本科中的鹮亚科鸟类通称鹮,而琵鹭亚科鸟类则统称琵鹭
  • 基基·卡马雷纳恩里克·S·“基基”·卡马雷纳·萨拉萨尔(西班牙语:Enrique S. "Kiki" Camarena Salazar;1947年7月26日-1985年2月9日)是墨西哥裔美国人,供职于美国缉毒局并担任卧底特工一职。在
  • 格罗斯曼·马塞尔格罗斯曼·马塞尔(匈牙利语:Grossmann Marcell,1878年4月9日-1936年9月7日),犹太人,瑞士数学家,阿尔伯特·爱因斯坦的大学同窗和好友。格罗斯曼在苏黎世联邦理工学院担任数学教授,主
  • 非绝热耦合非绝热耦合(nonadiabatic coupling)又称电子振动耦合(vibronic coupling)或导数耦合(derivative coupling),是一个描述分子体系中电子与原子核间运动耦合作用的物理量 。在量子力