运算符重载

✍ dations ◷ 2025-11-27 00:25: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;}

分类

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

支持运算符重载的语言:

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

相关

  • 体格检查体格检查(physical examination、medical examination、clinical examination、check-up),简称体检,也称做身体检查、理学检查或健康检查,是医生运用自己的感官、检查器具、实验
  • 包涵体包涵体(inclusion bodies),或包含体,是无定形的蛋白质的聚集,被膜所包围。细胞破碎后,包涵体呈颗粒状,致密,低速离心就可以沉淀。包涵体难溶于水中,在变性剂溶液(如盐酸胍、脲)中才能溶
  • 列托-罗曼斯语雷托-罗曼语 (Rhaeto-Romance languages) 属于印欧语系罗曼语族,通行于瑞士东南部及意大利东北部。雷托-罗曼语包含三种语言:
  • 美国圣公会美国圣公会(The Episcopal Church)是普世圣公宗在美国、洪都拉斯、台湾、哥伦比亚、厄瓜多尔、海地、多米尼加共和国、委内瑞拉、英属维尔京群岛和部分欧洲地区的一个教区(英语
  • 政务参赞政务参赞(英语:Political counselor),又称政务参事、政治参赞等,是外交代表机构中负责政治事务的参赞,可驻于大使馆或公使馆中,位阶处于大使、公使、公使衔参赞(德语:Gesandter-Botsc
  • 老板老板,又名东主,台湾话、客家话称头家、老大,粤语又称老世或老细、事头、波士(源自英文Boss一词)。包含以下含义:
  • 科曼奇县科曼奇县(Comanche County, Oklahoma)是位于美国俄克拉何马州西南部的一个县。面积2,807平方公里。根据2000年美国人口普查,人口114,996人。县治劳顿。本县成立于1901年8月6日
  • 中华人民共和国传染病防治法《中华人民共和国传染病防治法》,是中华人民共和国的一部关于预防传染性疾病的日常传播、控制可能出现的疫情和处理重大公共卫生突发事件措施的专门法律。本法共七章,八十条。
  • 零库存零库存是指某种或某类商品、原材料或半成品基本上不处于库存状态。企业采取零库存的仓库储存策略,有利于降低在仓库存货方面出现的费用,也可以避免出现仓库存货出现老化等问题
  • 曼弗雷德交响曲《曼弗雷德交响曲》(英语:Manfred Symphony,俄语:Симфония «Манфред»),作品58,是俄国作曲家柴可夫斯基所作的交响作品。这是柴可夫斯基唯一没有编号的交响曲作