运算符重载

✍ dations ◷ 2025-12-04 18:03:00 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 马耳他坐标:35°57′32″N 14°24′43″E / 35.95889°N 14.41194°E / 35.95889; 14.41194面积以下资讯是以2011年估计国家领袖国内生产总值(购买力平价) 以下资讯是以2016年估计国
  • 五声调式,或称五声音阶,是中国音乐中的音阶,这5个音依次定名为宫、商、角(jué,ㄐㄩㄝˊ)、徵(zhǐ,ㄓˇ)、羽,大致相当于西洋音乐简谱上的唱名(do)、(re)、(mi)、(sol)、(la)。将这五个音按高低
  • 恩智浦恩智浦半导体(英语:NXP Semiconductors),前身为飞利浦半导体,由荷兰企业飞利浦在1953年创立。2006年8月31日,该公司首席执行官万豪敦在柏林向客户和员工宣布公司的新名称。恩智浦
  • span class=nowrapNbO(NOsub3/sub)sub3/sub/spa硝酸铌酰是一种无机化合物,化学式为NbO(NO3)3。硝酸铌酰由五氯化铌和五氧化二氮反应得到:硝酸铌酰是一种白色结晶粉末,在空气中发烟。遇水分解,产生硝酸和水合氧化铌(V)。
  • 马可·奥勒留马可·奥勒留(拉丁语:Marcus Aurelius,121年4月26日-180年3月17日),全名为马可·奥勒留·安敦宁·奥古斯都(拉丁语:Marcus Aurelius Antoninus Augustus)。是罗马帝国五贤帝时代最后
  • 消除反应消除反应(又称脱去反应或消去反应),是一种有机反应。是指一有机化合物分子和其他物质反应,失去部分原子或官能基(称为离去基)。反应后的分子会产生多键,为不饱和有机化合物。消除反
  • 锯齿波锯齿波(英语:sawtooth wave)是一种非正弦波,由于它具有类似锯子一样的波形,即具有一条直的斜线和一条垂直于横轴的直线的重复结构,它被命名为锯齿波。锯齿波的傅里叶级数展开为:
  • 光遗传学光遗传学融合光学及遗传学的技术,精准控制特定细胞在空间与时间上的活动。其时间上精准程度可达到毫秒,而空间上则能达到单一细胞大小。2010年光遗传学被Nature Methods选为年
  • 费尔泰因峰坐标:46°32′19″N 10°38′05″E / 46.53861°N 10.63472°E / 46.53861; 10.63472费尔泰因峰(意大利语:Cima Vertana),是意大利的山峰,位于该国东北部,由博尔扎诺-南蒂罗尔自治
  • 环蛸枕见内文环蛸枕(学名:),又名林西海胆,是一属已灭绝的海胆。它们生存于上白垩纪至始新世。其化石分布在非洲、亚洲、欧洲、北美洲及南美洲。环蛸枕是一种很小、紧密的心海胆,在其前端