运算符重载

✍ dations ◷ 2025-11-25 23:28:52 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 研究研究是用主动和系统方式的过程,是为了发现、解释或校正事实、事件、行为、或理论,或把这样事实、法则或理论作出实际应用。“研究”一词常用来描述关于某一特殊主题的资讯收集
  • 流行性脑膜炎流行性脑膜炎又名流行性脑脊髓膜炎(Epidemic meningitis),简称流脑。冬春季节是此病的高发期,发病高峰一般出现在每年的3月~4月份。如及早发现,及早治疗,本病治愈率较高。流行性脑
  • 中国话剧话剧指以对话为主的戏剧形式。话剧虽然可以使用少量音乐、歌唱等,但主要叙述手段为演员在台上无伴奏的对白或独白。中国传统戏剧均不属于话剧,一些西方传统戏剧如古希腊戏剧因
  • 海岛海岛可以指:
  • 卡塔尔军事共11,800人海湾战争沙乌地领导的干预也门行动卡塔尔军事是卡塔尔国的武装力量,该国仅有11800人的武力,然而位处关键战略位置和石油经济的支撑,有欧美英等国的武器支援。16辆豹2
  • 傅佛国傅佛国(英语:Joshua A. Fogel,1950年-),是一名专注于研究现代中国历史以及中日两国文化与政治关系的汉学家、历史学家和翻译家,加拿大多伦多约克大学历史学教授,拥有加拿大首席科学
  • 杜瑞清杜瑞清(1943年12月19日-2019年11月20日),男,陕西扶风人,中国英语语言文学专家,西安外国语学院原院长。1943年12月19日出生于陕西省扶风县。1967年9月本科毕业于西安外国语学院英语
  • 伊萨克·波梅兰丘克伊萨克·雅科夫列维奇·波梅兰丘克(俄语:Исаа́к Я́ковлевич Померанчу́к,1913年5月20日-1966年12月14日),出生于俄罗斯帝国华沙,前苏联物理学家。他是I
  • 永龄教育慈善基金会财团法人永龄教育慈善基金会(英语译名:Yonglin Foundation)为台湾企业家郭台铭及其第一任夫人林淑如在2000年创办的基金会,“永龄”一名即是从其父母的名字中各取“永”字与“龄
  • 索布拉尔半岛坐标:64°30′S 59°40′W / 64.500°S 59.667°W / -64.500; -59.667索布拉尔半岛(保加利亚语:Sobral Peninsula)是南极洲的半岛,位于葛拉汉地的北部,长20公里、宽9公里,西面是蒙