With C++, you can redefine the function of most built-in operators. These operators can be redefined, or “overloaded,” globally or on a class-by-class basis. Overloaded operators are implemented as functions and can be class-member or global functions.
The name of an overloaded operator is operatorx, where x is the operator as it appears in Table 12.2. For example, to overload the addition operator, you define a function called operator+. Similarly, to overload the addition/assignment operator, +=, define a function called operator+=.
Although these operators are usually called implicitly by the compiler when they are encountered in code, they can be invoked explicitly the same way as any member or nonmember function is called:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Table 12.2 Redefinable Operators
Operator | Name | Type |
, | Comma | Binary |
! | Logical NOT | Unary |
!= | Inequality | Binary |
% | Modulus | Binary |
%= | Modulus/assignment | Binary |
& | Bitwise AND | Binary |
& | Address-of | Unary |
&& | Logical AND | Binary |
&= | Bitwise AND/assignment | Binary |
( ) | Function call | — |
* | Multiplication | Binary |
* | Pointer dereference | Unary |
*= | Multiplication/assignment | Binary |
+ | Addition | Binary |
+ | Unary Plus | Unary |
++ | Increment1 | Unary |
+= | Addition/assignment | Binary |
– | Subtraction | Binary |
– | Unary negation | Unary |
–– |
Decrement1 | Unary |
–= | Subtraction/assignment | Binary |
–> | Member selection | Binary |
–>* | Pointer-to-member selection | Binary |
/ | Division | Binary |
/= | Division/assignment | Binary |
< | Less than | Binary |
<< | Left shift | Binary |
<<= | Left shift/assignment | Binary |
<= | Less than or equal to | Binary |
= | Assignment | Binary |
== | Equality | Binary |
> | Greater than | Binary |
>= | Greater than or equal to | Binary |
>> | Right shift | Binary |
>>= | Right shift/assignment | Binary |
[ ] | Array subscript | — |
^ | Exclusive OR | Binary |
^= | Exclusive OR/assignment | Binary |
| | Bitwise inclusive OR | Binary |
|= | Bitwise inclusive OR/assignment | Binary |
|| | Logical OR | Binary |
~ | One’s complement | Unary |
delete | delete | — |
new | new | — |
1 Two versions of the unary increment and decrement operators exist: preincrement and postincrement.
The constraints on the various categories of overloaded operators are described in Unary Operators, Binary Operators, Assignment, Function Call, Subscripting, Class-Member Access, and Increment and Decrement.
The operators shown in Table 12.3 cannot be overloaded.
Table 12.3 Nonredefinable Operators
Operator | Name |
. | Member selection |
.* | Pointer-to-member selection |
:: | Scope resolution |
? : | Conditional |
# | Preprocessor symbol |
## | Preprocessor symbol |