运算符重载

✍ dations ◷ 2025-11-27 16:52:51 #多态,计算机编程

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

分类

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

支持运算符重载的语言:

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

相关

  • 南雄南雄市(官方音译:Nanxiong,粤音外文:Nam Hung)是中华人民共和国广东省下辖的一个副地级市,简称“雄”,古称“雄州”、“南雄州”。地当庾岭要口,为南北咽喉,控带群蛮,襟会百越,故以“雄
  • 真反鸟类真反鸟类(学名:Euenantiornithes)是生存于白垩纪的一类鸟翼类恐龙。它们被认为是反鸟亚纲中较为先进的分类,但不较为原始的伊比利亚鸟及诺盖尔鸟,主导类群都是生存于中生代晚期。
  • 补选补选是为递补政治职位的出缺而举行的非常规选举,只会在一个或多个政治职位(例如民选政务官、议会席位)有出缺时才会进行,以补回空缺职务的余下任期。补选能够维持该政治职位的代
  • 曼隆学院曼隆学院(Menlo College,当地常称:Menlo)是位于美国加利福尼亚州硅谷小镇阿瑟顿的一所四年制本科私立学院,1927年成立,当时是男子中学。2015年《美国新闻与世界报道》“西部地区大
  • 威廉·吉奥克威廉·弗朗西斯·吉奥克(William Francis Giauque,1895年5月12日-1982年3月28日),美国化学家,1949年因对物质在接近绝对零度时表现出的性质的研究而获得诺贝尔化学奖。他在加州大
  • 点烟器点烟器是汽车里面的一个电气装置,原先被设计为用来点燃卷烟;现被用来当作供应12伏特直流电的连接界面,用以在车内提供携带式设备电源,并可连接变压器以提供家用100至240伏特交流
  • 红刀豆蔓性刀豆,又名红凤豆、红刀豆、海刀豆、巴西豆,俗称刀板豆。是属于豆科刀豆属的一年生缠绕性草质藤本植物,植株长3-5米,会开白色或紫红色的蝶形花,为穗状花序。花期过后每个花穗
  • 静摩擦力静摩擦力是当相互接触的两个物体相对静止,但是存在着相对运动的趋势时,在接触面之间会产生一个阻碍相对运动的力,这个力就是静摩擦力。静摩擦力的方向和相对运动趋势的方向相反
  • 白云 (台湾艺人)李国弘(1970年11月28日-),艺名白云,台湾男演员、谐星、殡葬业者,三级片演员出身。曾经当过宪兵,父亲是安徽籍退伍军人。以肥胖壮硕的身材并常丑化自己来搞笑闻名,经常出现在各大综艺
  • 德国足球冠军列表德国足球冠军(德语:Deutsche Fußballmeister;直译:德国足球大师)这项荣誉始于1902/03年(德语:Deutsche Fußballmeisterschaft 1902/03),莱比锡夺得首届冠军,获得最多次冠军的球队则