运算符重载

✍ dations ◷ 2025-12-07 08:37:36 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 郭爱克郭爱克(1940年2月18日-),中国辽宁沈阳人,中国神经科学和生物物理学家。1965年毕业于莫斯科国立大学,1979年获慕尼黑大学自然科学博士学位。现任中国科学院生物物理研究所和中国科
  • 拉美西斯四世拉美西斯四世(Ramesses IV)是古埃及新王国时期第二十王朝的第三任法老。他在登基成为法老前的名字估计是Amonhirkhopshef。他是拉美西斯三世的第五个儿子,在拉美西斯三世在位的
  • 谋杀率各国谋杀率列表是指每年每10万人的谋杀数,统计数据从2000年开始。分析比较各国的谋杀率必须认真进行,可信的谋杀率也许是罕见的,这是因为不同国家的法律对“杀人”的定义不一样
  • 双行星双行星和联行星是非正式的天文学术语,用来描述一颗有着够大卫星的行星,因而必须考虑那颗卫星是否也算是行星。一个非官方的定义需要考虑轨道的重力中心(质心)是否落在两者的表面
  • 酰基载体蛋白酰基载体蛋白(英语:Acyl Carrier Protein,简称ACP)是脂肪酸与聚酮生物合成中的一个重要构件,它在合成过程中将生长链接在4'-磷酸泛酰巯基乙胺辅基的末端硫醇上形成硫羟酸酯以将生
  • 1382年重要事件及趋势重要人物
  • 黑松露黑松露(法语:truffe noire,学名:Tuber melanosporum),又称佩里戈尔松露(法语:truffe du Périgord)是一种原产于欧洲南部的松露品种,也是世界上最昂贵的食用真菌之一。意大利博物学家
  • 奥古斯塔斯·德摩根奥古斯塔斯·德摩根(Augustus De Morgan,1806年6月27日-1871年3月18日,英语发音.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI",
  • 约翰·B·泰勒约翰·布赖恩·泰勒(John Brian Taylor ,1946年12月8日-),美国货币政策方面的专家。出生于纽约州扬克斯,目前任斯坦福大学经济学教授。泰勒曾被视为2009年诺贝尔经济学奖潜在得主
  • 伊鲁杜河坐标:12°48′40″S 49°39′40″E / 12.81111°S 49.66111°E / -12.81111; 49.66111伊鲁杜河(马达加斯加语:Irodo),是马达加斯加的河流,位于该国东北部,由萨瓦区负责管辖,河道全长