ad-hoc polymorphism

operator overloading

(Or "Operator overloading"). Use of a single symbol to represent operators with different argument types, e.g. "-", used either, as a monadic operator to negate an expression, or as a dyadic operator to return the difference between two expressions. Another example is "+" used to add either integers or floating-point numbers. Overloading is also known as ad-hoc polymorphism.

User-defined operator overloading is provided by several modern programming languages, e.g. C++'s class system and the functional programming language Haskell's type classes.

Ad-hoc polymorphism (better described as overloading) is the ability to use the same syntax for objects of different types, e.g. "+" for addition of reals and integers or "-" for unary negation or diadic subtraction. Parametric polymorphism allows the same object code for a function to handle arguments of many types but overloading only reuses syntax and requires different code to handle different types.