110 likes | 313 Views
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
E N D
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 feetthis is a conversion from Distance to a float