运算符重载

✍ dations ◷ 2024-09-20 08:53:31 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • BIBSYSBIBSYS是由挪威教育与研究部设立和组织的一个行政机构。它是一家服务提供商,专注于交流、存储和提供与图书馆资源相关的历史性元数据的检索。
  • 电磁学电磁学(英语:electromagnetism)是研究电磁力(电荷粒子之间的一种物理性相互作用) 的物理学的一个分支。电磁力通常表现为电磁场,如电场、磁场和光。电磁力是自然界中四种基本相互
  • 奥古斯特·魏斯曼弗里德里希·利奥波德·奥古斯特·魏斯曼(德语:Friedrich Leopold August Weismann,1834年1月17日 - 1914年11月5日),德国的进化生物学家。恩斯特·迈尔将他列为19世纪第二个最显
  • 渡渡鸟渡渡鸟(学名:Raphus cucullatus)又称毛里求斯愚鸠、愚鸠、孤鸽,是已灭绝的渡渡鸟属的唯一物种,属鸽形目鸠鸽科,仅产于南印度洋马达加斯加岛东侧的毛里求斯岛上,是一种不会飞的鸟。
  • 晜孙孙是指子女的子女,男性称孙儿或孙子,女性称孙女。在父系社会,儿子的子女称为“内孙”或者“孙”,女儿的子女称为“外孙”。而自己的孙或外孙就称自己为祖父母或外祖父母。另外,闽
  • 2012年Gaon流媒体冠军作品列表2012年Gaon流媒体冠军作品列表《2012年Gaon流媒体冠军作品列表》主要列举2012年度曾经登上“Gaon Chart”串流媒体周榜、月榜及年榜冠军的歌曲作品及其资料。2010年:Bad Girl
  • 2007年欧洲大奖赛2007年欧洲大奖赛是2007年世界一级方程式锦标赛第十站比赛,比赛为期在2007年7月20日到7月22日在纽伦举行。2006年8月29日,赛会发表在2007年赛季,不会举行欧洲大奖赛。由2007年
  • 胡塔班江火山胡塔班江火山(印尼语:Hutapanjang)是印度尼西亚占碑省的火山,该火山类型为复式火山。目前对该火山的资料未甚少,并且未有该火山最后一次确切喷发纪录。
  • 三星Galaxy YSamsung Galaxy Y是三星电子推出的一款入门Android手机,对象为年青人。三星电子在2011年8月公布。其主要特点是3G速度可达7.2Mbit/s的连接。
  • D2高速公路 (斯洛伐克)D2高速公路(斯洛伐克语:Diaľnica D2)是斯洛伐克的一条高速公路,全长80公里。北起与捷克的边境,经首都布拉迪斯拉发,进入匈牙利。工程始于1974年,1978至1980年布尔诺至布拉迪斯拉发