运算符重载

✍ dations ◷ 2025-12-07 02:18:18 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 神经性病变周边神经病变(英语:Peripheral neuropathy,缩写PN)俗称神经系统疾病,是指神经系统的疾病或异常状态下的神经系统 。虽然在大众文化中神经病常常是一种代替精神病的说法,但神经病实
  • 反刍动物反刍亚目(学名:Ruminantia)是偶蹄目中的一个亚目,其中的动物均是食草性动物,拥有分为多个胃室的胃进行反刍的动作。通过这个结构反刍亚目的动物,可以通过微生物消化其他只有一个胃
  • 窈窕淑女《窈窕淑女》(英语:My Fair Lady)是一部1964年出品,取材自爱尔兰剧作家萧伯纳舞台剧《卖花女》(Pygmalion),由奥黛丽·赫本、雷克斯·哈里逊主演,乔治·库克执导的电影。《窈窕淑女
  • 红包袋红包袋是包着金钱作为礼物送人的包装封套,粤语称利是封。相传送红包的习俗,在很久以前就流行。红包袋在唐代时已经出现,当时是用手工织的布袋做“封面”,仅限于宫廷及官方使用,民
  • 中国医保中华人民共和国医疗保险是指中华人民共和国的国营医疗保险制度,属于中华人民共和国医疗卫生一环。整体中国医保与户籍制度有深度挂勾,首先是根据身份别,城镇居民户口和农村居民
  • Terminologia Histologica()是一份细胞生物学和组织学的受控词表,由FCAT(Federative International Committee on Anatomical Terminology(英语:Federative International Committee on Anatomical Termino
  • 时间标准某个时间系统的时间标准又称时间基准,是定义如何测量时间的一种规范,具体包括测量时间间隔的尺度基准和定义起始时刻的参考基准。时间基准的确定依赖于某些人工或自然的周期性
  • 周永明周永明(英语:Peter Chou,1956年11月24日-),缅甸华人,现任数字王国董事长 .周永明的父亲亦是缅甸华人,于缅甸经营玉石生意。周永明在缅甸出生,于缅甸完成专科学业后,赴台湾留学,就读国
  • 陈坚 (汶川大地震遇难者)陈坚(1982年-2008年5月15日),四川安县人,中华人民共和国公民,汶川大地震中的遇难人士。陈坚是四川绵阳安县秀水人,地震发生时正在北川羌族自治县工作,被埋在瓦砾下。5月15日下午3时,
  • 卡尼 (亚利桑那州)卡尼(英文:Kearny),是美国亚利桑那州皮纳尔县下属的一座城市。 面积约为2.81平方英里(约合7.3平方公里)。根据2010年美国人口普查,该市有人口1,950人,人口密度为706/平方英里。在建