Przeładowanie operatorów Przeładowania operatorów dokonuje się definiując swoją własną funkcję, która: o nazywa się operator@ - gdzie @ oznacza symbol operatora, który chcemy przeładować

o jako co najmniej jeden z argumentów przyjmuje obiekt danej klasy (obiekt, nie wskaźnik do obiektu) typ_zwracany operator@ ( argumenty )

{

//ciało funkcji

}

Lista operatorów, które można przeładowywać:

!

++

--

, +

-

*

/

%

^

&

|

~

=

<

>

+=

-=

*=

/=

%=

^=

&=

|=

<<

>>

<<= >>= = =

!=

<=

>=

&&

||

->*

->*

new

delete ()

[]

Operatory, których nie można przeładować:

.

- tak się odnosimy do składnika klasy;

.*

- tak wybieramy składnik wskaźnikiem

::

- tak określamy zakres

Sposoby

definiowana

operatorów

przeładowanych

(funkcji

operatorowych):

o Jako funkcja składowa klasy ( wymaga aby obiekt stojący po lewej stronie operatora był obiektem jej klasy), o Jako zwykła funkcja globalna Jeśli operator definiujemy jako funkcję składową klasy, to ma ona zawsze o jeden argument mniej niż ta sama funkcja napisana w postaci funkcji globalnej.

Spowodowane jest to istnieniem wskaźnika this.

Kiedy operator ma być funkcją składową a kiedy globalną?

o Jeżeli zmienia w jakiś sposób obiekt, na którym pracuje, to powinien być zdefiniowany jako funkcja składowa klasy. Operator zwraca wtedy l wartość, np. =

++

--

+= -=

o Jeśli operator nie modyfikuje obiektu, wówczas powinien być w postaci funkcji globalnej.

Wyjątek:

Cztery operatory, które musza być niestatycznymi funkcjami składowymi:

=

[]

()

->