1 / 9

Operator Overloading

Operator Overloading. Syntax. The general syntax is: [friend] returntype operator <operator symbol> ( <parameters> ) { <statements>; }. Syntax. The number of arguments in the overloaded operator’s argument list depends on two factors:

Download Presentation

Operator Overloading

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Operator Overloading

  2. Syntax The general syntax is: [friend] returntype operator<operator symbol> ( <parameters> ) { <statements>; }

  3. Syntax • The number of arguments in the overloaded operator’s argument list depends on two factors: • Whether it’s a unary operator (one argument) or a binary operator (two arguments). • Whether the operator is defined as a global function (one argument for unary, two for binary) or a member function (zero arguments for unary, one for binary – the object becomes the left-hand argument).

  4. Operators that can’t be overloaded • All operators can be overloaded except for the ones below: • The member selection operator - . • The pointer to member dereference operator- .* • Scope access/resolution operator - :: • Conditional operator - ?: • Also, there are no user-defined operators and you can’t change the precedence rules.

  5. Overloaded operators as member or non-member functions? • The decision is based on what argument(s) is needed by the operator. • In general, if it doesn’t make any difference, they should be members, to emphasize the association between the operator and its class. • When the left-hand operand is always an object of the current class, this works fine. • Sometimes you want the left-hand operand to be an object of some other class, then the overloaded operator cannot be a member function.

  6. Some ”tricky” operators • Increment and decrement operators • ++a (a pre-increment) generates a call to operator++(a); • a++ (a post-increment) generates a call to operator++(a,int)for non-member functions. • The member function versions, would be: • B::operator++( ); and • B::operator++(int); • Note: a dummy value is passed by the compiler to distinguish (generate different signatures) the two versions.

  7. Some ”tricky” operators • The assignment operator • Defining the assignment operator has a lot in common with defining the copy constructor and the destructor. List& List::operator=( const List& b ) { if( this != &b) //check for self assignment { free(); copy(b); } return *this; }

  8. An example • Let’s look at our example implementation of the class ’Values’

  9. Arguments and return values • Guidelines • Return by value as const • The return value optimization

More Related