C++/Przeciążanie operatorów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Gbaz (dyskusja | edycje)
→‎Operatory post- i pre- inkrementacji: - dopisanie teorii w oparciu o "Symfonię C++ standard tom II"
Gbaz (dyskusja | edycje)
Trochę teorii do przeładowywań, jakie operatory można przeładowywać, jakich nie itp..., w oparciu o "Symfonię C++"
Linia 1:
'''Przeładowanie (przeciążanie) operatorów''' polega na nadaniu im nowych funkcji.
 
==Trochę teorii na wstępie==
Przeładowywanie operatorów, jest to definiowanie operatorów dla własnych typów. Można tego dokonać w większości przypadków jako metodę składową lub jako metodę globalną.
Przeładowywać możemy następujące operatory:
<source lang="cpp">
+ // operator dodawania, może być jedno lub dwuargumentowy
- // operator odejmowania, może być jedno lub dwuargumentowy
* // operator mnożenia (dwuargumentowy) lub operator
/
% // operator modulo (dwuargumentowy)
^
& // operator and logiczne (dwuargumentowy), lub operator uzyskania adresu (jednoargumentowy) gdy go nie zdefiniujemy robi to za nas kompilator
~
!
= // operator równości dwuargumentowy, gdy go nie zdefiniujemy robi to za nas kompilator
<
>
+=
-=
*=
/=
%=
^=
&=
|=
<<
>>
>>=
<<=
==
!=
<=
>=
&&
||
++
--
, // przecinek, gdy go nie zdefiniujemy robi to za nas kompilator
->*
->
() // operator wywołania funkcji (ile-chcemy-argumentowy)
[]
new // ponizsze operatory gdy ich nie zdefiniujemy robi to za nas kompilator
new[]
delete
delete[]
</source>
Nie można przeładowywać:
<source lang="cpp">
. // odniesienie do składowej klasy
.* // tak wybieramy składnik wskaźnikiem
:: // operator zakresu
?: // operator zwracający wartość zależnie od spełnienia warunku
static_cast, dynamic_cast, reinterpret_cast, const_cast
sizeof // pobranie rozmiaru danego typu, lub jego wewnętrznej składowej
</source>
Parę uwag co do operatorów:
Nie można zmienić ich priorytetów, argumentowości, argumenty operatorów nie mogą być domniemane, redefiniować operatory można gdy conajmniej jeden argument jest typu zdefiniowanego przez użytkownika. operatory =, [], (), -> muszą być niestatycznymi funkcjami składowymi w danej klasie
==Użycie==