运算符重载

✍ dations ◷ 2025-12-06 07:43:18 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 造假造假,可能是指:
  • 安德烈·华依达安杰依·维托尔德·瓦伊达(波兰语:Andrzej Witold Wajda,1926年3月6日-2016年10月9日),波兰电影导演,也是波兰电影学校(英语:Polish Film School)的创办人。最出名的作品为奠定影史地
  • 黄武黄武(222年十月-229年四月)是三国时期东吴的君主孙权的第一个年号,共计8年。这也是东吴政权的第一个年号,在221年时孙权以诸侯名义上是向曹魏称藩属,但随着222年魏吴之间的关系持
  • 星报星报(英语:The Star,MYX:6084)是马来西亚一家以英语为媒介语的小报报社,总部设在八打灵再也。星报于1971年创立,原是北马槟城的一份区域性英文报,后来在1976年开始向全国发行。1995
  • 菲律宾独立宣言菲律宾独立宣言( 错误:{{lang-xx}}:文本有斜体标记(帮助))是由菲律宾革命政府在1898年6月12日签署。其宣告了菲律宾人民反西班牙殖民斗争的结束,并宣告菲律宾正式成为一个独立主权
  • 网上猜谜游戏网上猜谜游戏(Online Riddle / Enigma Online),是指出题者通过网页制作了各种谜题,供参与者利用互联网及各种知识来解答谜题的一种新兴游戏。一些网页谜题发布后就不再进行更新
  • 阿尔封斯·都德阿尔封斯·都德(Alphonse Daudet)(1840年5月13日-1897年12月17日),法国写实派小说家,有自己独特的风格。特别是他的短篇小说,《最后一课》、《柏林之围》等作品都已成为世界文学的珍
  • 圣宜美拉主教座堂坐标:48°19′07″N 18°05′13″E / 48.31861°N 18.08694°E / 48.31861; 18.08694圣宜美拉主教座堂(斯洛伐克语:)是位于斯洛伐克城市尼特拉的一座罗马天主教的教堂。类似布拉
  • 卡尔萨瓦自治市卡尔萨瓦自治市(拉脱维亚语:Kārsavas novads),是拉脱维亚的一个自治市,设立于2009年,位于该国东部。人口7128,面积628.4平方公里,人口密度约11人/km2。
  • 固定收益证券固定收益证券是指非股权的任何可以产生固定(或经常性)收益的投资工具,尽管每次收益的值可能会变化。例如,如果甲借钱给乙,而乙必须按月支付甲利息,此借款即可以称为固定收益证券。