什么是运算符重载?(operator overloading?)

运算符重载是一种计算机编程语言功能,允许程序员重写默认运算符。重载运算符函数时,可以使用自定义参数声明它,这些参数的数据类型与运算符默认能够处理的数据类型不同。新参数可以是基本类型或用户定义的类型。在重写函数体中,程序员可以根据需要操纵参数值。通过使用运算符重载,程序员可以创建直观的快捷方式来操作用户定义的数据类型或修改默认数据类型的处理方式。...

运算符重载是一种计算机编程语言功能,允许程序员重写默认运算符。重载运算符函数时,可以使用自定义参数声明它,这些参数的数据类型与运算符默认能够处理的数据类型不同。新参数可以是基本类型或用户定义的类型。在重写函数体中,程序员可以根据需要操纵参数值。通过使用运算符重载,程序员可以创建直观的快捷方式来操作用户定义的数据类型或修改默认数据类型的处理方式。

C++ allows some of its operators to be overloaded.

创建用户定义的数据类型时,无法执行简单的操作任务,例如将其中两个添加到一起,或者通过对数据类型使用一元增量运算符来递增内部数据。运算符(包括加法符号)可以被重写,这样,如果它们用作两个自定义数据类型之间的二进制运算符,它们将返回用户定义的结果。同样,一元运算符(如递增运算符)可能会被重写以增加用户定义类型内的内部值。

一旦操作符重载,编译器就必须决定在遇到重载操作符时要做什么。编译器根据用作操作数或与运算符结合使用的数据类型决定要采取的正确操作。如果操作数是运算符函数的参数值,是用户定义的数据类型,则编译器将选择重载函数,该重载函数的参数与所使用的操作数匹配。

计算机语言允许这种特殊多态性的方式各不相同。不同的语言可能允许创建新的自定义运算符、重载其所有或部分运算符,或者根本不允许运算符重载。C++、C语言、PHP和Perl都允许它们的一些运算符重载。C、Java和Javascript中不允许运算符重载。

运算符重载和函数重载通常都是一些争论的主题。一些人声称,给程序员改变操作员行为方式的自由可能会导致使用定制代码的其他程序员产生无意错误。相反的观点认为,允许运算符重载使程序员能够创建直观、简洁的代码,这些代码更容易理解,生成成本更低,并减少错误。

  • 发表于 2021-12-14 12:51
  • 阅读 ( 192 )
  • 分类:互联网

你可能感兴趣的文章

压倒一切(overriding)和c中的过载#(overloading in c#)的区别

...将全部打印Shape类的显示方法的内容。 什么是c中的过载#(overloading in c#)? 在重载中,多个方法具有相同的名称,但具有不同的参数。参数可以是不同类型的。这些方法也可以有不同数量的参数。方法重载发生在同一个类中。重...

  • 发布于 2020-10-18 23:50
  • 阅读 ( 218 )

按位(bitwise)和逻辑运算符(logical operators)的区别

关键区别-位运算符与逻辑运算符 在编程中,有一些情况需要进行数学计算。运算符是编程语言的符号,用于对值或变量执行特定的逻辑或数学函数。编程语言中有各种各样的运算符。其中一些是算术运算符、关系运算符、逻...

  • 发布于 2020-10-19 16:48
  • 阅读 ( 817 )

超载(overloading)和在java中重写(overriding in java)的区别

...表格形式在Java中重载与重写 6. 摘要 什么是java中的重载(overloading in java)? 重载是使用不同的实现创建同名的多个方法的能力。请参阅下面的Java代码。 图01:Java程序,解释使用不同数量的参数重载 根据上面的程序,类A包含两个...

  • 发布于 2020-10-19 21:20
  • 阅读 ( 366 )

超载(overloading)和覆盖(overriding)的区别

过载与覆盖 重载和重写都是大多数编程语言的特性。重载是一种特性,它允许在同一个类中创建几个具有相同名称的方法,但在函数的输入类型和输出类型方面彼此不同。方法重载通常与在函数调用中强制类型检查的静态编程...

  • 发布于 2021-06-23 10:08
  • 阅读 ( 179 )

马洛克(malloc)和新的(new)的区别

...序员需要选择最快的方法来使用。 与函数malloc不同,new运算符是类型安全的。函数malloc是C语言的库函数。它所做的只是分配内存并返回一个指向它的指针。另一方面,操作符new是一个语言级的构造,它的任务是通过分配内存和...

  • 发布于 2021-06-23 19:10
  • 阅读 ( 195 )

差分放大器(differential amplifier)和运算放大器(operational amplifier)的区别

...大开环增益、高输入阻抗和低输出阻抗的差分放大器。 什么是差分放大器(a differential amplifier)? A differential amplifier is an electric component which amplifies the difference between two signals applied to two input terminals, while rejecting signals which are commo...

  • 发布于 2021-06-27 08:19
  • 阅读 ( 426 )

新的(new)和C++中删除运算符(delete operator in c++)的区别

C++中new和Delphi运算符的主要区别在于new被用来为对象或数组分配内存,而DELATE用于释放使用新运算符分配的内存。 有两种类型的记忆作为静态和动态记忆。假设一个语句,比如int a;int数组[10];程序员已经知道这些变量需要多...

  • 发布于 2021-07-01 04:35
  • 阅读 ( 183 )

复制构造函数(copy constructor)和赋值运算符(assignment operator)的区别

复制构造函数和赋值运算符的主要区别在于,复制构造函数是一种有助于创建已存在对象的副本而不影响原始对象值的构造函数,而赋值运算符是一种有助于将新值赋给程序中变量的运算符。 构造函数是一种特殊的方法,在创...

  • 发布于 2021-07-01 05:44
  • 阅读 ( 538 )

C++(c++)和JAVA(java)的区别

...区别。 转到语句 此外,虽然C++有GOTO语句,但java没有。 运算符重载 运算符重载是C++和java之间的另一个区别。C++支持运算符重载,而java不支持运算符重载。 结构和工会 C++和java之间的另一个区别是C++支持结构和联合,而java则不...

  • 发布于 2021-07-01 07:51
  • 阅读 ( 335 )

c级#(c#)和JAVA(java)的区别

...运行库(CLR)上,而Java程序运行在Java虚拟机(JVM)上。 运算符重载 此外,C#和Java之间的一个重要区别是,C#支持运算符重载,而Java不支持运算符重载。 类属性 此外,C#中还有类属性。但是,Java中没有类属性。 代表 此外,C#...

  • 发布于 2021-07-01 21:30
  • 阅读 ( 250 )
廖鹛鹛
廖鹛鹛

0 篇文章

相关推荐