运算符重载

✍ dations ◷ 2024-12-22 22:39:25 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 后生动物真后生动物(学名:Eumetazoa)是指所有具有细胞组织的动物。动物中只有侧生动物不属于真后生动物。真后生动物细胞间有连接,就是所谓的"紧密连接"。它们的胚胎最少会发生两个胚层:
  • 生物土壤结皮生物土壤结皮(Biological soil crust) 是干旱和半干旱气候土壤表面的生物群落。生物土壤结皮遍布世界各地,依地形、土质、气候、植群、微生境、扰动(英语:disturbance regimes)
  • 科内利斯·约翰内斯·万·豪敦科内利斯·约翰内斯·万·豪敦(荷兰语:Cornelis Johannes van Houten,1920年2月18日-2002年8月24日)是一位荷兰天文学家,有时候也被称为基斯·万·豪敦(Kees van Houten) 。豪敦生于
  • 尤比克争取更好的匈牙利运动尤比克争取更好的匈牙利运动(匈牙利语:Jobbik Magyarországért Mozgalom),简称尤比克,是匈牙利民族主义政党。该党自称为“有原则、保守的和彻底爱国的基督教政党”,其“根本目
  • 约翰·昆德拉约翰·阿尔伯特·昆德拉(英语:John Albert Kundla,1916年7月3日-2017年7月23日),生于美国宾西法尼亚州斯达强克逊,前职业和大学篮球教练。昆德拉大学期间是明尼苏达大学金囊地鼠篮
  • NCT 127NCT 127(朝鲜语:엔시티 127)是韩国SM娱乐的跨国性男子组合NCT的首支分队,于2016年7月7日以迷你专辑《NCT #127》出道。127为韩国首尔的经度,表示该子团是将以首尔为基础,向世界舞
  • 克拉布奥查德 (肯塔基州)克拉布奥查德(英语:Crab Orchard),是美国肯塔基州的一座城市。面积约为4.7平方公里(1.8平方英里)。根据2010年美国人口普查,该市的人口为841人。
  • 秘鲁番荔枝秘鲁番荔枝(学名:),别名毛叶番荔枝、冷子番荔枝,是一种番荔枝科的植物。它是一种常绿约三至九米高的枝叶密集的树或者灌木。原产于秘鲁、厄瓜多尔及智利。秘鲁番荔枝是一种枝叶密
  • 大克勒什区大克勒什区(匈牙利语:Nagykőrösi járás),是匈牙利的一个区,位于该国北部,由佩斯州负责管辖,首府设于大克勒什,面积349平方公里,2011年人口27,977,人口密度每平方公里80人。
  • 文图拉县线文图拉县线(英语:Ventura County Line)是南加州都会铁道运营的一条线路,来往于东文图拉站和洛杉矶联合车站之间,途径圣费尔南多谷。这条线路于1992年开始服务,是南加州都会铁道最