运算符重载

✍ dations ◷ 2025-12-06 14:13:49 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 菲利库迪岛菲利库迪岛是意大利的岛屿,位于西西里岛以北的提雷尼亚海,属于埃奥利群岛的一部分,长5.4公里、宽3.1公里,面积9.5平方公里,最高点海拔高度774米,2001年人口235。坐标:38°34′N 14
  • 状态方程在物理学和热力学中,状态方程(英语:Equation of state),也称物态方程,表达了热力学系统中若干个态函数参量之间的关系。特别是在热力学中,状态方程是一个热力学方程,描述了给定物理
  • 访问互联网权访问互联网权或上网权(right to Internet access),也称为宽带权(right to broadband)、连接自由(freedom to connect),认为所有人必须能够访问互联网,以行使和享受其言论自由、见解自
  • 天津市人民医院天津市人民医院,又称南开大学人民医院,位于天津市红桥区芥园道190号,成立于2004年5月28日,由原天津市第二中心医院、天津市滨江医院、天津市红十字会医院合并组建。是一家三级甲
  • 希德希卡德希(英文:Cudahy),是美国加利福尼亚州洛杉矶县下属的一座城市。建市于1960年11月10日,面积 大约为1.18平方英里 (3.1平方公里)。根据2010年美国人口普查,该市有人口23,805人。
  • 硫氰酸硫氰酸(化学式:HSCN)是硫氰的氢酸,与异硫氰酸(HNCS)互为异构体。硫氰酸可由硫氰酸钡和硫酸反应制得:硫氰酸是无色的、极易挥发的液体,在常温下迅速分解。它在-90°C左右或5%的稀溶液
  • 缩合聚合物缩合聚合物泛指所有经缩合反应生成的聚合物。在聚合过程中有小分子如水、甲醛及氯等物质离开聚合物链。与其相对的则为由不饱和烃透过没有单体损失的加成反应生成的加成聚合
  • 真假公主-安娜塔西亚《真假公主-安娜塔西亚》(英语:)是一部美国动画音乐电影,于1997年11月14日于美国上映。《真假公主-安娜塔西亚》曾经获得2项奥斯卡奖提名。这部电影是受到1956年的电影《真假公主
  • 瑞士意大利语区瑞士意大利语区(意大利语:Svizzera italiana)是瑞士联邦的地理区域,由意大利语占主导地位的地区组成,但并非正式的行政区划。瑞士意大利语区由提契诺州全境和格劳宾登州南部组成,
  • 安州镇安州镇,是中华人民共和国河北省保定市安新县下辖的一个乡镇级行政单位。安州镇下辖以下地区:南关村、膳马庙村、李庄村、马庄村、建昌村、烧盆庄村、王庄村、辛立庄村、前午门