运算符重载

✍ dations ◷ 2025-02-24 04:04:35 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 加成聚合反应加成反应(addition reaction)是一种有机化学反应,它发生在有双键或叁键的物质中。加成反应进行后,重键打开,原来重键两端的原子各连接上一个新的基团。加成反应一般是两分子反应
  • 卢旺达大屠杀卢旺达大屠杀发生在位于东非的卢旺达,是胡图族人对图西族人进行的卢旺达大屠杀,从1994年4月6日至7月中旬的100天里,卢旺达700多万人口中约有50万—100万人被杀。屠杀的背景是胡
  • 法制史法制史(legal history;history of law)是法律及相关制度发展的历史,相较于狭义的法律史仅着重于法律本身的演进,一般法制史所包含的范围较广,除法律本身之外,及于其他与法律相关制
  • 丁卯胡乱丁卯战争,又称丁卯胡乱,指的是1627年后金入侵朝鲜的战争。因发生在丁卯年,故而得名。1623年,朝鲜发生政变,仁祖被西人党拥上了王位。他一反光海君的中立政策,拒绝与后金互市,断绝了
  • 晋州大捷釜山镇 – 多大浦 – 东莱城 – 尚州 – 忠州弹琴台 – 玉浦 – 泗川 – 临津江 – 唐浦 – 唐项浦 – 闲山岛 – 龙仁 – 梨峙 – 平壤 – 釜山浦 – 北关
  • 比萨比萨(意大利语:Pisa)是意大利中部名城,位于阿尔诺河三角洲,人口10余万,面积190平方公里,纺织、制革业和商业较发达。同时也是著名的文教中心,有1813年由拿破仑创建的比萨高等师范大
  • 乙级战犯乙级战犯指犯有“战争罪行”,一般指控包括“下令、准许或容许虐待战俘或平民”或“故意或鲁莽疏忽责任,未有阻止暴行”。部分甲级战犯同时有被控以此“战争罪行”。
  • 埃德蒙·A·沃尔什埃德蒙·阿洛伊修斯·沃尔什(英语:Edmund Aloysius Walsh,1885年10月10日-1956年10月31日)美国学者,天主教司铎、耶稣会修道士、地缘政治学教授,乔治城大学埃德蒙·A·沃尔什外事学
  • 乳孔藻属乳孔藻属(学名:)是已灭绝的一属绿藻。生存在早奥陶纪至晚志留纪的海洋中,其化石常与珊瑚礁、腕足类和苔藓虫的化石一同出现。它们曾错误地被划分为原生动物类及海绵类。乳孔藻的
  • 美好世界《美好世界》(英语:WILL: A Wonderful World)是中国大陆独立游戏工作室任意门制作的文字冒险游戏。游戏于2015年开发,2017年6月6日在 Steam 上发售,对应 Windows 和 macOS 平台。