fbpx
维基百科

运算符重载

在计算机程序设计中,运算符重载(英語:operator overloading)是多态的一种。这里,运算符(比如+===)被当作多态函数,它们的行为随着其参数类型的不同而不同。运算符并不一定总是符号。

简介 编辑

运算符重载通常只是一种语法糖[1]。它可以简单地通过函数调用来模拟:

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; } 

分类 编辑

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

支持运算符重载的语言:

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

注释与引用 编辑

  1. ^ Stroustrup, Bjarne. . C++ FAQ. [27 August 2020]. (原始内容存档于14 August 2011). 
  2. ^ . Official Ruby FAQ. [2022-04-29]. (原始内容存档于2022-06-28). 
  3. ^ Type classes instead of overloading.
  4. ^ . Annotated Ada Reference Manual. [2022-04-29]. (原始内容存档于2018-07-19). 
  5. ^ . [2022-04-29]. (原始内容存档于2019-02-26). 
  6. ^ Drayton, Peter; Albahari, Ben; Neward, Ted. . O'Reilly Media, Inc. 2003 [2022-04-29]. ISBN 978-0-596-00526-9. (原始内容存档于2022-04-29). 
  7. ^ . dlang.org. [2020-10-10]. (原始内容存档于2022-05-30). 
  8. ^ . Kotlin. [24 June 2018]. (原始内容存档于2022-05-24). 
  9. ^ Orwant, Jon. . O'Reilly Media, Inc. 4 November 2002: 347– [2022-04-29]. ISBN 978-0-596-00310-4. (原始内容存档于2022-05-14). 
  10. ^ . The Python Language Reference. [2022-04-29]. (原始内容存档于2012-10-26). 
  11. ^ Binary functions with a symbolic name can be called infix.
  12. ^ . freepascal.org. [2020-09-30]. (原始内容存档于2020-08-11). 
  13. ^ . bourabai.kz. [2021-04-07]. (原始内容存档于2020-02-22). 
  14. ^ . [2022-04-29]. (原始内容存档于2022-04-29). 
  15. ^ . Delphi Manual. [1 December 2014]. (原始内容存档于2019-04-15). 
  16. ^ . Lua-users Wiki. [2022-04-29]. (原始内容存档于2022-05-06). 
  17. ^ 字符串使用“+”运算符串联一般不认为是运算符重载,而是编译器“魔法”,即将相应操作转译为StringBuilder类的调用。

运算符重载, 在计算机程序设计中, 英語, operator, overloading, 是多态的一种, 这里, 运算符, 比如, 被当作多态函数, 它们的行为随着其参数类型的不同而不同, 运算符并不一定总是符号, 目录, 简介, 用途, 簡易實例, 分类, 注释与引用简介, 编辑通常只是一种语法糖, 它可以简单地通过函数调用来模拟, 在一个支持的语言里, 上面的写法要比下面的写法有效而简练, multiply, 假设运算符, 的优先级高于运算符, 当一种语言允许运算符在某种情况下被隐式调用的时候, 将不只提供写法. 在计算机程序设计中 运算符重载 英語 operator overloading 是多态的一种 这里 运算符 比如 或 被当作多态函数 它们的行为随着其参数类型的不同而不同 运算符并不一定总是符号 目录 1 简介 2 用途 3 簡易實例 4 分类 5 注释与引用简介 编辑运算符重载通常只是一种语法糖 1 它可以简单地通过函数调用来模拟 a b c 在一个支持运算符重载的语言里 上面的写法要比下面的写法有效而简练 add a multiply b c 假设运算符 的优先级高于运算符 当一种语言允许运算符在某种情况下被隐式调用的时候 运算符重载将不只提供写法上的方便 例如 Ruby中的to s运算符就是如此 它將一个对象轉換為字符串 用途 编辑运算符重载由于使程序员能够根据运算子类型的不同来决定运算符功能的不同而有多樣用途 C 中 lt lt 的使用就是一个例子 表达式 a lt lt 1 当a是整型变量时将返回a的两倍 但是当a是一个输出流时将向这个流中写入 1 因为运算符重载允许程序员改变运算符通常的语义 慎重使用运算符重载通常被认为是一个好习惯 簡易實例 编辑以下是C 语言示例 include lt iostream gt 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 lt lt p3 lt lt p3 x lt lt lt lt p3 y lt lt lt lt endl cout lt lt p4 lt lt p4 x lt lt lt lt p4 y lt lt lt lt endl return 0 分类 编辑支持运算符重载和定义新运算符的语言 PostgreSQL的SQL方言 Ruby 2 Haskell 3 支持运算符重载的语言 Ada 4 C 5 C 6 D 7 Kotlin 8 Perl 9 Python 10 Pico 英语 Pico programming language 某种程度上 11 Free Pascal 12 FreeBASIC 13 Visual Basic 需要Visual Basic NET 2008或更高版本 14 Delphi 15 Lua 16 不支持运算符重载的语言 C Java 17 Objective C注释与引用 编辑 Stroustrup Bjarne Operator Overloading C FAQ 27 August 2020 原始内容存档于14 August 2011 Methods Official Ruby FAQ 2022 04 29 原始内容存档于2022 06 28 Type classes instead of overloading 6 6 Overloading of Operators Annotated Ada Reference Manual 2022 04 29 原始内容存档于2018 07 19 C Operator Overloading 2022 04 29 原始内容存档于2019 02 26 Drayton Peter Albahari Ben Neward Ted C in a Nutshell O Reilly Media Inc 2003 2022 04 29 ISBN 978 0 596 00526 9 原始内容存档于2022 04 29 Operator Overloading D Programming Language dlang org 2020 10 10 原始内容存档于2022 05 30 Operator overloading Kotlin 24 June 2018 原始内容存档于2022 05 24 Orwant Jon Computer Science amp Perl Programming Best of The Perl Journal O Reilly Media Inc 4 November 2002 347 2022 04 29 ISBN 978 0 596 00310 4 原始内容存档于2022 05 14 3 Data Model The Python Language Reference 2022 04 29 原始内容存档于2012 10 26 Binary functions with a symbolic name can be called infix Introduction freepascal org 2020 09 30 原始内容存档于2020 08 11 Operator Overloading bourabai kz 2021 04 07 原始内容存档于2020 02 22 How to Define an Operator Visual Basic 2022 04 29 原始内容存档于2022 04 29 Operator Overloading Delphi Manual 1 December 2014 原始内容存档于2019 04 15 Metamethods Tutorial Lua users Wiki 2022 04 29 原始内容存档于2022 05 06 字符串使用 运算符串联一般不认为是运算符重载 而是编译器 魔法 即将相应操作转译为StringBuilder类的调用 取自 https zh wikipedia org w index php title 运算符重载 amp oldid 78599023, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。