运算符重载

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

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

分类

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

支持运算符重载的语言:

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

相关

  • 性器官人类的性是指性的质量,或指人类怎样对性予以体验或表达。性可能经历和表达的方式多种多样,包括思想、幻想、欲望、信仰、态度、价值观、行为、实践、角色和关系。这些可能表现
  • Csub4/sub类植物C4类二氧化碳固定(英语:C4 carbon fixation)是植物的三种碳固定方式之一,因为第一个可观察得到的产物是一个四碳化合物草酰乙酸,人们就命名其为C4类碳固定。C4类植物比C3类植物在
  • 蒙古族长调民歌长调(蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag Tig","Menk Har_a Tig","Menk Scnin Tig","Oyun Gurban Ulus Tig"
  • i独立市在美国范围内,独立市(英语:Independent city)是指一座不处于任何县境内的城市,但包括市县合一在内的少数例外不属于此列。在美国现有的41座独立市中,38座位于弗吉尼亚州;该州宪法(英
  • 肝 (脏腑)在中医传统脏象学说中,肝属五行中的木,其主要功能为“疏泄”与“藏血”。其中疏泄包含了精神情绪、消化,以及与气、血、水的流通;而藏血则包括了血液的储藏及调节。除此之外,肝与
  • 盎格鲁-撒克逊使命盎格鲁-撒克逊使命指公元8世纪时,法兰克帝国向苏格兰以及盎格鲁-撒克逊英格兰传播凯尔特基督教的过程,传教团自7世纪末期于弗里西亚开始行动。
  • 化学工程师化学工程师(英文:Chemical engineer),亦称制程化学工程师或化工研究员。在工程领域中,大部分化学工程师从事于化工产业,主要工作内容为化工产品制造程序的研究与开发,以及厂房与厂
  • 安娜索菲亚·罗伯安娜索菲亚·罗伯(英语:AnnaSophia Robb,1993年12月8日-),美国女演员。
  • 各国风力发电截至 2016 年底,全球风力发电装机容量达到 486,790 MW,比前一年增加 12.5%。2016 年、2015 年、2014 年、2013 年全球新增的风力发电分别为 54,632 MW、63,330 MW、51,447 MW、
  • 理查兹控制器理查兹控制器(Richards controller),是使用简单的集成电路和组合逻辑电路来实现一个有限状态机的一种方法。该方法以发明家查尔斯·L·理查兹(Charles L. Richards)命名。一个明