Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Operator Overloading. 2 Syntax The general syntax is: [friend] returntype operator ( ) { ; }

Similar presentations


Presentation on theme: "1 Operator Overloading. 2 Syntax The general syntax is: [friend] returntype operator ( ) { ; }"— Presentation transcript:

1 1 Operator Overloading

2 2 Syntax The general syntax is: [friend] returntype operator ( ) { ; }

3 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 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 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 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 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 8 An example  Let’s look at our example implementation of the class ’Values’

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


Download ppt "1 Operator Overloading. 2 Syntax The general syntax is: [friend] returntype operator ( ) { ; }"

Similar presentations


Ads by Google