运算符重载

✍ dations ◷ 2025-12-10 20:23:18 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 心智图心智图(英语:Mind Map),又称脑图、心智地图、脑力激荡图、思维导图、灵感触发图、概念地图、或思维地图,是一种图像式思维的工具以及一种利用图像式思考辅助工具来表达思维的工具
  • 发酵工程发酵工程是指采用现代工程技术手段,利用微生物的某些特定功能,为人类生产有用的产品,或直接把微生物应用于工业生产过程的一种技术。发酵工程的内容包括菌种选育、培养基的配置
  • 最终宿主宿主(英语:Host),也称为寄主,是指为寄生物包括寄生虫、病毒等提供生存环境的生物。最终宿主(primary host或definitive host)是指寄生物的成虫赖以寄生的物种。这类宿主通常为寄生
  • 威灵顿公爵威灵顿公爵(Duke of Wellington)是联合王国贵族头衔,于1814年封与阿瑟·韦尔斯利将军。
  • 崔宇植崔宇植(朝鲜语:최우식 Choi Woo-sik,1990年3月26日-),韩国男演员。十岁时随家人移民加拿大,后因演员梦想回到韩国。2014年凭《巨人》获得第19届釜山国际影展演员奖。崔宇植在小学
  • 台南报恩堂坐标:22°59′34″N 120°12′13″E / 22.992823°N 120.203629°E / 22.992823; 120.203629台南报恩堂位于台南市中西区,于民国七十四年(1985年)11月27日公告为三级古迹。该斋
  • 牛肝菌属参见文内牛肝菌属(学名:)为牛肝菌科的一属。
  • 独立宣言列表独立宣言是一个地区宣告独立、成为主权国家的主张,通常是宣告脱离其他国家的部分或全体领土,或是自一个更大的国家中分离。一些地区发表独立宣言后,却未能成功保持独立,例如在原
  • 交易所 (消歧义)交易所是金融市场的交易平台,可以指:
  • 大红袍 (中药)大红袍,为豆科秔子梢属植物毛秔子梢,以根入药。秋季挖根,洗净切片晒干。大红袍为小灌木,高约1米,通体均被锈色硬毛。根直而长,可达50厘米,常有锈色油点,断面带浅红色。茎直立,枝有棱