运算符重载

✍ dations ◷ 2025-11-28 17:41:28 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 胫骨胫骨,位于小腿内侧,是小腿上的两块长骨之一。胫骨的大小居人体第二位,仅次于股骨。胫骨对支持人体体重起重要作用。胫骨上端膨大,与股骨下端以及髌骨共同构成膝关节。胫骨内侧面
  • 爱丁堡大学坐标:55°56′50.6″N 3°11′13.9″W / 55.947389°N 3.187194°W / 55.947389; -3.187194爱丁堡大学(英语:University of Edinburgh)坐落在苏格兰首府爱丁堡市,是一所创建于158
  • 多聚甲醛多聚甲醛(IUPAC命名Polyoxymethylene,POM)(或称聚甲醛;聚缩醛),为甲醛的聚合物(高分子量聚甲醛),一般结构长度有八到一百个单位。长链多聚甲醛常用制作于耐热塑胶, 又称聚甲醛塑胶(POE,杜
  • 铁氰化钾铁氰化钾、六氰合铁(III)酸钾,是一种无机化合物,化学式为K3,俗称赤血盐。该亮红色固体盐含有3−配离子。 它可溶于水,水溶液带有黄绿色荧光。铁氰化钾是用氯气氧化亚铁氰化钾溶
  • 小舌会厌音小舌会厌音是一组双发音部位辅音,即同时发出小舌音及会厌音。例如索马里语的小舌塞音.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Se
  • M3/M5斯图亚特坦克斯图亚特轻型坦克(Stuart tank;M3/M5轻型坦克)是第二次世界大战中,美国制造数量最多的轻型坦克。欧洲战场上所使用的英军以美国南北战争名将斯图亚特为M3和M5坦克命名。在英国,它
  • 赤部赤部,为汉字索引中的部首之一,康熙字典214个部首中的第一百五十五个(七划的则为第九个)。就繁体和简体中文中,赤部归于七划部首。赤部只以左方为部字。且无其他部首可用者将部首
  • 欧罗巴龙属欧罗巴龙属(属名:)是种原始腕龙科恐龙,属于蜥脚下目,是种四足草食性恐龙。它们生存于侏罗纪启莫里阶的德国北部,地质年代约1亿5400万年前。欧罗巴龙被认为是种因岛屿环境隔离而造
  • 戈佐内海戈佐内海(英语:Inland Sea, Gozo;马耳他语:Qawra)是马耳他的一个内海或潟湖。它的形成比较特别:地质学家估计是因为构成戈佐岛的石灰岩上有断层,使海水不断侵蚀,成为了洞穴。然而,这
  • 提斯塔河提斯塔河(英语:Teesta,发音:ti:ˈstə;或写为Tista;尼泊尔语:टिष्टा;印地语: टीस्ता;孟加拉文:তিস্তা),是印度、孟加拉国的一条河流,为布拉马普特拉河的支流。该河被称