运算符重载

✍ dations ◷ 2025-12-07 22:38:29 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 爱奥尼亚伊奥尼亚(拉丁语:Ionia;古希腊语:Ἰωνία;土耳其语:İyonya;这三种语言的发音均为“伊奥尼亚”而非“爱奥尼亚”)是古希腊时代对今天土耳其安纳托利亚西南海岸地区的称呼。伊奥尼
  • 头索动物亚门头索动物亚门是脊索动物门的一个亚门。头索动物的脊索延伸到背神经管的前方,故名。其咽鳃裂众多。头索动物一般称为文昌鱼,故又名狭心纲及文昌鱼纲。因无真正的头部,又称为无头
  • 卡氏座标笛卡尔坐标系(英语:Cartesian coordinate system,也称直角坐标系)在数学中是一种正交坐标系,由法国数学家勒内·笛卡尔引入而有此名。二维的直角坐标系是由两条相互垂直、相交于
  • 栖息地破碎化栖息地细碎化是指某些生物栖息地被分隔开,致使种群被分割的问题。栖息地细碎化可能是由于地理进程中环境慢慢被改变 (这可能是新物种形成的原因),或者是由于人类活动,例如土地用
  • 宣布投降第二次贡比涅停战协定(法语:Armistice du 22 juin 1940;德语:Waffenstillstand von Compiègne (1940)),又译第二次康白尼停战协定、第二次康边停战协定,由法国与纳粹德国在1940年6
  • 瓦尔特·施艾拉小瓦尔特·“沃里”·马蒂·施艾拉(英语:Walter 'Wally' Marty Schirra, Jr.,1923年3月12日-2007年5月3日), 曾是一位美国国家航空航天局的宇航员,执行过水星-大力神8号、双子星6A
  • 黄祸论“黄祸”(英语:Yellow Peril)俗称“黄祸论”,是欧洲殖民帝国与美国对亚洲民族,尤其是对中国与日本具有批判性的代表用语。该词盛行自著名版画“欧洲各民族,保卫你们的信仰和家园!”
  • 重要他人重要他人(Significant other)是一个形容人际关系的用词也称定位他人、显著他人,为研究精神病学的美国心理学家哈利·苏利文(Harry Stack Sullivan)于1953年所提出。在心理学中,重
  • 丁敬臣丁敬臣(1880年-?年),江苏江都籍商人,曾长期在青岛经商,曾任青岛总商会会长,抗战期间曾与日本军方合作。1880年,丁敬臣生于江苏省扬州府江都县(今江苏省扬州市江都区)。早年捐为监生,曾先
  • 阶级冲突阶级冲突(Class conflict),指的是:对立阶级之间的斗争。它反映了由于社会地位的不同而导致的群体之间的根本性的紧张,甚至是对立关系。马克思主义者认为阶级冲突在阶级社会的历史