运算符重载

✍ dations ◷ 2025-12-05 10:36:08 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 即发性过敏反应即发性过敏反应(英语:Immediate Hypersensitivity),又称Ⅰ型超敏反应(英语:Type I hypersensitivity),是IgE介导的免疫反应,乃最常见的超敏反应类型。主要可分为两种:过敏原第一次接触
  • 隧道隧道是指在既有的建筑或土石结构中挖出来的通道,供交通立体化、穿山越岭、地下通道、越江、过海、管道运输、电缆地下化、水利工程等使用。隧道不一定全是地下通道,仅位于地面
  • 四分差四分位距(英语:interquartile range, IQR)。是描述统计学中的一种方法,以确定第三个四分位数和第一个四分位数的差值(即 Q
  • 食胎盘行为食胎盘行为(英语:Placentophagy)是一种哺乳动物在自己的幼仔出生后吃掉胎盘的行为。食胎盘行为在包括食草动物在内的有胎盘类动物中是一个普遍现象。其中仅有少量物种没有这种
  • 赵长青赵长青(1953年7月-),中华人民共和国书法家,中国书法家协会原分党组书记、副主席、秘书长,第十二届全国政协委员。
  • 俄勒冈领地俄勒冈领地的徽章俄勒冈领地(英语:Oregon Territory),又译俄勒冈准州。指的是1846年之前英国和美国之间有领土争议的北美洲西部地区,位于北纬42度以北,北纬54度40分以南,洛基山脉以
  • 美国宪法第二修正案宪法正文 I ∙ II ∙ III ∙ IV ∙ V ∙ VI ∙ VII其它修正案 XI ∙ XII ∙ XIII ∙ XIV ∙ XV XVI ∙ XVII ∙ XVIII ∙ XIX ∙ XX XXI ∙ XXII ∙ XXIII
  • 班甘连尾班甘连尾�为辐鳍鱼纲鲇形目连尾�科的其中一种,为热带淡水鱼,分布于亚洲马来西亚及婆罗洲淡水流域,体长可达20公分,栖息在底层水域,以小鱼及甲壳类为食,背鳍有1硬棘,会造成创伤,可做为
  • .cf.cf为中非共和国国家及地区顶级域(ccTLD)的域名。是少数提供免费顶级域名注册的国家。A .ac .ad .ae .af .ag .ai .al .am .ao .aq .ar .as .at .au .aw .ax .az  B .ba .
  • 盐埕大路盐埕大路(Yancheng Avenue)为高雄市弥陀区北端的南北向重要道路,本道路编号台17线。起端接维仁桥跨越阿公店溪连结永安区,末端止于盐港一路口。而台17线途中接续中正东路行经弥