Upload
damian-gregory
View
216
Download
0
Embed Size (px)
Citation preview
Function and Operator Overloading
Overloading
• Review of function overloading– It is giving several definitions to a single function
name
– The compiler can figure out which definition to use by the number and type of arguments
• Operator overloading is giving additional definitions to operators
• Some operators that can be overloaded +, -, >, <, [ ], *, etc
The difference between a function and an operator• An operator (such as +) is really just a function
with different syntax• In a function, the argument are placed in
parentheses after the function name, as in:– add(cost, tax)
– This is postfix notation
• For an operator, the argument are placed on either side of the operator, as in:– cost + tax
– This is infix notation
Advantages of operator overloading• The point of operator overloading is to
provide the same concise expression for user-defined types as built in types
• It is just clearer and simpler to say– Cost + tax, than to say– Add(cost, tax)
The role of types in overloading
• C++ programming is a type sensitive and type-focused process
• Programmers can use built-in types or define their own types
• Operators can be used with user-defined types as well as built-in types– The operators new meaning must be defined
• The compiler uses the type of the arguments to decide which definition to use for overloaded functions or operators
How operators are overloading
• You write a function (with a header and body) as you normally would
• The function name is now the keyword operator followed by the symbol to be overloaded– Example: return_type operator++( )
• To use an operator on a class object, that operator must be overloaded (with a couple of exceptions)– The assignment operator (=)
– The address operator (&)
Restrictions on operator overloading
• The precedence of an operator cannot be changed by overloading.– An aside on precedence—table on precedence
• You cannot change the number of operands(arguments) an operators takes– Unary operators remain unary; binary remain
binary; the only ternary operator (:?) cannot be overloaded
• It is not possible to create new operators– So ** for exponentiation cannot be created
Operator functions as class members vs. as friend functions
• They can be either class members or friends• As member functions:
– The leftmost (or only) argument must be a class object or reference to a class object
• If the left operand must be a built-in type or object of a different class, it must be a non-member function– If it must access private members of the class directly,
then it must be a friend function
Data Conversions
• Type conversions between built-in data types may be implicit or explicit– Use static_cast<new_type>(old_type_variable) for
explicit type conversions
• All conversions between objects and built-in types must be explicit
• Example: convert 5 feet 3 inches to 5.25 feet this is a conversion from Distance to a float