Operatory
Przegląd zagadnień
Rodzaje operatorów
Konwersja typów
Porównywanie obiektów
Przeciążanie operatorów
Podsumowanie
Pytania sprawdzające
Laboratorium
Rodzaje operatorów (1)
Operatory binarne
arytmetyczne
bitowe
logiczne
Operatory unarne
+
-
*
/
%
++
--
&
|
^
<<
>>
~
&&
||
!
Rodzaje operatorów (2)
Operatory porównania
Operatory przypisania
Operator ternarny
==
!=
>
<
>=
<=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
? :
Konwersja typów
Konwersja niejawna (implicit)
Konwersja jawna (explicit)
byte b = 10;
int i = b;
long l = i;
float f = 1.5f;
double d = f;
long l = 100;
int i = (int) l;
double d = 13.45;
int j = (int) d;
Porównywanie obiektów (1)
Referencje
Gruszka g = new Gruszka();
Gruszka h = g;
if (g == h) { // prawda }
Kwadrat k = new Kwadrat(5);
Kwadrat l = new Kwadrat(5);
if (k == l) { // fałsz }
Porównywanie obiektów (2)
Metody Equals
if (EqualsReference(g,h)) ...
if (Equals(k,l)) ...
if (k.Equals(l)) ...
class Student
{
private int NumerIndeksu
public
override bool Equals(Object s)
{
if (s == null) return false;
if (s is Student)
{
if (NumerIndeksu == s.NumerIndeksu)
return true;
}
return false;
}
}
Przeciążanie operatorów (1)
class Wektor
{
public double x,y,z;
public static bool operator == (Wektor l, Wektor p)
{
if (l.x == p.x && l.y == p.y && l.z == p.z)
return true;
return false;
}
public static bool operator != (Wektor l, Wektor p)
{
if (l == p) return false;
return true;
}
}
Pary operatorów
==, !=
<, >
<=, >=
Przeciążanie operatorów (2)
class Wektor
{
public double x,y,z;
public static Wektor operator + (Wektor l, Wektor p)
{
Wektor w = new Wektor();
w.x = l.x + p.x;
w.y = l.y + p.y;
w.z = l.z + p.z;
return w;
}
public static Wektor operator * (Wektor l, double p)
{
Wektor w = new Wektor();
w.x = l.x * p;
w.y = l.y * p;
w.z = l.z * p;
return w;
}
}
Podsumowanie
Rodzaje operatorów: unarne i binarne,
arytmetyczne, bitowe i logiczne, porównania
i przypisania
Przypisaniu może towarzyszyć konwersja
typu – niejawna lub jawna (gdy istnieje
ryzyko utraty danych)
Domyślnie porównywane są referencje
obiektów
Klasy mogą przeciążać metodę Equals() oraz
operatory:
arytmetyczne
bitowe
porównania
Pytania sprawdzające
Czym się różnią operatory binarne od
unarnych?
Kiedy stosujemy jawną konwersję
typów?
Jakie jest domyślne działanie
operatora porównywania stosowanego
do obiektów?
Na czym polega przeciążanie
operatorów?
Jakie operatory można przeciążać?
Laboratorium