Operator Overloading

9
1 Operator Overloading

description

Operator Overloading. Syntax. The general syntax is: [friend] returntype operator ( ) { ; }. Syntax. The number of arguments in the overloaded operator’s argument list depends on two factors: - PowerPoint PPT Presentation

Transcript of Operator Overloading

Page 1: Operator Overloading

1

Operator Overloading

Page 2: Operator Overloading

2

Syntax

The general syntax is:

[friend] returntype operator<operator symbol>

( <parameters> )

{

<statements>;

}

Page 3: Operator Overloading

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).

Page 4: Operator Overloading

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.

Page 5: Operator Overloading

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.

Page 6: Operator Overloading

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.

Page 7: Operator Overloading

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;

}

Page 8: Operator Overloading

8

An example Let’s look at our example

implementation of the class ’Values’

Page 9: Operator Overloading

9

Arguments and return values Guidelines

Return by value as const

The return value optimization