运算符重载

✍ dations ◷ 2025-12-02 09:06:45 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 瘟疫公司《瘟疫公司》(英语:Plague Inc.)是一款由Ndemic Creations独自开发,适用于iOS、Android和Windows Phone平台的战略游戏。玩家在游戏中需要将一种病毒传遍整个世界,然后将所有人消
  • 奥里萨奥里萨邦(奥里亚语:ଓଡ଼ିଶା oṛiśā,印地语:उड़ीसा,英语:Odisha,英文旧名:Orissa),位于印度东部的一个邦,首府为布巴内什瓦尔。奥里萨邦为印度东部的邦,东临孟加拉湾。立法
  • 粒子发现年表这是一份通过粒子被发现的年份的先后顺序来进行排序的列表。如想找到更详细的列表,请参看粒子列表。
  • 坛之浦之战坛之浦之战(壇ノ浦の戦い)为日本平安时代末期1185年4月25日(元历2年/寿永4年3月24日)于日本长门国坛之浦(位于今山口县下关市)发生的一场战役,为源平合战的最后一战。1183年(寿永2年
  • 干岩头村干岩头村位于中国湖南省永州市零陵区富家桥镇,又称涧岩头,是中国历史文化名村。有保存较完好的6个明清古建筑院落,其中最大的一座(周家大院)建于清同治年间。坐标:26°01′19″N
  • 近畿地方近畿地方(日语:近畿地方/きんきちほう  *),又称为关西地方(日语:関西地方/かんさいちほう  *),是日本本州中西部的一个地理区域,由京都府、大阪府、滋贺县、兵库县、奈良县、和歌山
  • 佩森 (亚利桑那州)佩森(英文:Payson),是美国亚利桑那州希拉县下属的一座城市。 面积约为19.47平方英里(约合50.4平方公里)。根据2010年美国人口普查,该市有人口15,301人,人口密度为786/平方英里。在建
  • 浦岛太郎浦岛太郎(日语:浦島 太郎/うらしま たろう )是一个日本民间故事中的人物,同时也是该故事的名称。这个故事最先出现在《丹后国风土记》中,其他的书中如《日本书纪》与《万叶集》也
  • 尼子十勇士尼子十勇士(あまごじゅうゆうし)是战国大名尼子氏的家臣之中,拥立尼子胜久力图再兴尼子家的10位杰出的武士。以山中鹿介为首,因讲谈、立川文库等而有名。‘后太平记’已提到“尼
  • 高个儿《高个儿》(俄语:Дылда,台湾译《裂爱》)是2019年俄罗斯导演坎特米尔·巴拉果夫(英语:Kantemir Balagov)的剧情长片。