运算符重载

✍ dations ◷ 2025-12-09 00:40:57 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 托尔夸托·塔索托尔夸托·塔索(Torquato Tasso,1544年3月11日-1595年4月25日),意大利16世纪诗人。他的作品有《里纳尔多》(1563年)、《阿敏塔》(1573年)、《耶路撒冷的解放》(1581年)等。他的作品对欧
  • 樊 嘉樊嘉(1958年3月-),出生于江苏昆山,籍贯江苏江都,中国肝肿瘤外科学家,复旦大学附属中山医院外科教授。2017年当选为中国科学院院士。1983年毕业于南通医学院,1989年在南京铁道医学院
  • 铁砧铁砧是一种常用工具,其最简单的形式是有一个用以放置锻打物体坚硬平面的金属块。铁砧的惯性能够使锻打工具的能量转移到工件上。在大多数情况下,砧用于金属锻造方面。在现代焊
  • 图表一张图表(Chart),或又称为统计图表,代表了一张图像化的数据,并经常以所用的图像命名,例如圆饼图,是主要使用圆形符号,长条图或直方图,则主要使用长方形符号。折线图,意味着使用线条符
  • 幽灵搓球机幽灵搓球机Ghost Ballers是一支美国男子三对三篮球队,在BIG3比赛联盟比赛。
  • 米乌·多布雷斯库米乌·多布雷斯库(罗马尼亚语:Miu Dobrescu;1927年1月30日-1994年),是摩尔多瓦人,罗马尼亚共产党中央政治执行委员会委员、中央书记处书记,负责文化和意识形态,是最早吹捧齐奥塞斯库
  • 瑚宝瑚宝(满语:ᡥᡡᠪᠣᡠ,穆麟德:,1695年-1756年),伊尔库勒氏,满洲镶白旗人。清朝政治人物,武进士出身。雍正五年(1727年)中式丁未科二甲武进士,授官三等侍卫,补陕西永兴堡守备,雍正八年(1730年
  • 法托斯·贝西拉伊法托斯·贝西拉伊(塞尔维亚语:Фатос Бећирај,阿尔巴尼亚语:Fatos Beqiraj,1988年5月5日-),是一名阿尔巴尼亚裔黑山足球运动员,现效力于俄甲球队莫斯科迪纳摩。亚泰官网对
  • Smart BetaSmart Beta 投资策略(也被称为 Advanced Beta 或 Alternative Beta)通过增强一个或多个不同因子的特征,对基金资产进行选股及个股权重上的优化。基于透明且固定规则的投资策略,
  • 马丁区坐标:49°3′46″N 18°55′19″E / 49.06278°N 18.92194°E / 49.06278; 18.92194马丁区(斯洛伐克语:Martin),是斯洛伐克的一个区,位于该国北部,由日利纳州负责管辖,面积736平方公