运算符重载

✍ dations ◷ 2025-12-10 06:50:06 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 体内射精体内射精简称内射,俗称中出,是指人类男性在达到性高潮时于性伴侣之阴道或直肠中射精的情况,通常在没有戴上保险套的阴道性交或肛交中发生。在女性阴道内的体内射精是引发体内受
  • 5-HTP5-羟色氨酸(英语:5-Hydroxytryptophan, 5-HTP;INN商品名:oxitriptan)是一种天然的氨基酸代谢中间产物,同时也是神经递质5-羟色胺与褪黑素的生物合成前体。5-羟色氨酸在美英以及加
  • 粒子侦测器粒子探测器(英语:Particle detector),是在物理实验、原子核物理学等领域用于探测、跟踪和鉴别高能粒子的一种物理实验设备。现代粒子探测器也用于测量放射粒子的能量、动量、旋
  • 廖必琦廖必琦(?-?),字荔庄,福建莆田人,为清朝政治人物。廖必琦为雍正二年(1724年)甲辰科第三甲进士。后由额外主事改庶吉士。曾修《莆田县志》。
  • 二次色二次色是指在指定的色彩空间,由两种原色混合而成的颜色。在人眼中,最佳的光之三原色(一次色)为红、绿、蓝。我们可以透过叠加的色光波长,看见其产出的最大范围的可见色彩。通常
  • 堪萨斯州第三国会选区堪萨斯州第三国会选区是美国堪萨斯州四个众议院选区之一。
  • 伊恩·弗莱明伊恩·兰开斯特·弗莱明(英语:Ian Lancaster Fleming,1908年5月28日-1964年8月12日),英国作家和记者,代表作为詹姆斯·邦德(James Bond)系列小说及儿童故事《万能飞天车》()。伊恩·弗
  • 伊姆兰·阿巴斯伊姆兰·阿巴斯·纳克维(乌尔都语:عمران عباس نقوی‎‎,英语:Imran Abbas Naqvi,1982年10月25日-)是巴基斯坦男演员及模特儿,主要出现在巴基斯坦电视连续剧和电影。他
  • 兰州大学出版社兰州大学出版社是中华人民共和国的一家出版社,成立于1985年1月,社址位于甘肃省兰州市天水南路222号,由教育部主管、兰州大学主办。1985年1月,兰州大学出版社经文化部出版事业管
  • 超级兔子超级兔子是一款主要功能为维护和清理系统的免费软件,由超级兔子团队开发,创始人蔡旋,适用于Windows XP/Windows 2003/Windows Vista/Windows 2008/Windows 7操作系统。软件最初