Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. ·...

26
העמסת אופרטורים ליווי מקצועי: ארז קלרwww.corner.co.il Web Services

Transcript of Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. ·...

Page 1: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים

ארז קלר: ליווי מקצועי

www.corner.co.il

Web Services

Page 2: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

.מבוא•

.העמסת אופרטורים לוגיים•

.העמסת אופרטורים מתמטיים•

.העמסת אופרטורי המרה•

.העמסת אופרטורים אונריים•

Page 3: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

:הפעולות הבאות ברורת מאליהן

int num1 = 12;

int num2 = 23;

int num3 = num1+num2;

if(num1 == num2)

num3 +=5;

:הפעולות הבאות יעוררו תמיההDate d1 = new Date(...)

Date d2 = new Date(...)

Date d3 = d1-d2;

if(d1 == d2)

d3 += 5;

Page 4: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

, פעילות אריתמטית לוגית על משתנים פשוטים היא דבר ברור•

הכיצד ידע האופרטור , פעילות זו על אובייקטים מעוררת תמיהה

?כיצד לבצע את פעולתו

או על פי אילו שדות לבצע ?, הכיצד ידע לאיזה שדה להוסיף ערך•

?השוואה

, כברירת מחדל האופרטורים אינם יודעים כיצד לפעול עם אובייקטים•

.אותם" ללמד"מסוגלת ( C++כמו שפת ) C#אולם

בהעמסה יש להקפיד על מספר כללים

נעמיס אופרטור רק במידה ויש משמעות ברורה מאליה •

.להעמסה

.נקפיד לשמור על כל המשמעויות המקוריות שלהאופרטור•

Page 5: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

.כל המתודות המעמיסות אופרטורים הן סטאטיות•

.מספר הפרמטרים שהמתודות מקבלות הוא כמספר האופרנדים•

ולאחריה שם operatorשם המתודה מתחיל במילה השמורה •

.האופרטור המועמס

+:העמסה של האופרטור , לדוגמה •

public static Time operator+(Time t1, Time t2)

{

int newHours = t1.hours + t2.hours;

int newMinutes = t1.minutes + t2.minutes;

return new Time(newHours, newMinutes);

}

Page 6: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

האופרטורים הניתנים להעמסה•unary operators

+, -, !, ~, ++, --, true, false

•binary operators

+, -, *, /, %, &, |, ^, <<, >>

•comparison operators

==, !=, <, >, <=, >=

:אולם הם חייבים להיות מועמסים בזוגות

.< =עם > => , עם , < =! עם ==

Page 7: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

האופרטורים שאינם ניתנים להעמסה

+=, -=, *=, /=, %=, &=, |=, ^=, <<=,

>>=

= ,.? ,: ,- ,>new, is, sizeof,

typeof, &&, ||

Page 8: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

מבוא

המטרה בהעמסת אופרטורים היא לשפר את

הקריאות של הקוד ובכך להימנע משגיאות

.וטעויות :לדוגמה

ללא אופרטורים

myIntVar1 = Int.Add(myIntVar2,

Int.Add(Int.Add(myIntVar3,

myIntVar4), 33));

: עם אופרטורים

myIntVar1 = myIntVar2 + myIntVar3 + myIntVar4 + 33;

Page 9: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

.מבוא•

.העמסת אופרטורים לוגיים•

.העמסת אופרטורים מתמטיים•

.העמסת אופרטורי המרה•

.העמסת אופרטורים אונריים•

Page 10: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים לוגיים

Relational Operators

:מחייבים העמסה בזוגות

< and >

<= and >=

== and !=

Equalsיש לדרוס את המתודות =! -ו== בהעמסת האופרטורים •

. GetHashCodeואת

Page 11: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים לוגיים

לדוגמהclass Circle

{

public static bool operator==( Circle c1,Circle c2)

{

return c1.Equals(c2);

}

. . .

}

:שימוש

If(c1 == c2)

{

. . .

}

Page 12: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים לוגיים

class Circle לדוגמה

{

public static bool operator!=(Circle c1,Circle c2)

{

if (c1.x != c2.x || c1.y != c2.y || c1.radius != c2.radius)

return true;

return false;

}

. . .

}

:שימוש

If(c1 != c2)

{

. . .

}

Page 13: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

.מבוא•

.העמסת אופרטורים לוגיים•

.העמסת אופרטורים מתמטיים•

.העמסת אופרטורי המרה•

.העמסת אופרטורים אונריים•

Page 14: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים מתמטיים

/ :, * , -, + ניתן להעמיס את האופרטורים :לדוגמה

class Circle

{

public static Circle operator+(Circle c1,Circle c2)

{

Circle c = new Circle();

c.x = c1.x + c2.x;

c.y = c1.y + c2.y;

c.radius = c1.radius + c2.radius;

return c;

}

}

Page 15: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים מתמטיים

/ :, * , -, + ניתן להעמיס את האופרטורים :לדוגמה

class Circle

{

. . .

public static Circle operator-(Circle c1,Circle c2)

{

Circle c = new Circle(c1.x - c2.x, c1.y - c2.y, c1.radius - c2.radius);

return c;

}

}

Page 16: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

.מבוא•

.העמסת אופרטורים לוגיים•

.העמסת אופרטורים מתמטיים•

.העמסת אופרטורי המרה•

.העמסת אופרטורים אונריים•

Page 17: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורי המרה

•C# מאפשרת להגדיר שיטות העמסה מאוד

. User Defined Conversionsמיוחדות המכונות

( Casting)שיטות אלו מאפשרות לבצע המרה •

או מרומז ( Explicit)מטיפוס לטיפוס באופן מפורש

(Implicit )על פי הגדרתנו.

Page 18: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורי המרה

:לדוגמהclass Person

{ ...

public static implicit operator string (Person p)

{

string str;

str = p.name + " " + p.age;

return str;

}

}

Person -המרה מ

String -ל

Page 19: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורי המרה

:לדוגמה

class Person

{ ...

public static explicit operator Person (string str)

{

Person p = new Person();

string []tmp = new string [2];

tmp = str.Split(char.Parse(" "));

p.name = tmp[0];

p.age = int.Parse(tmp[1]);

return p;

}

}

-ל String -המרה מ

Person

Page 20: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורי המרה

: Implicit -השימוש בהמרה מרומזת, דוגמה

class App

{

static void Main(string[] args)

{

Person p1 = new Person("Moshe",12);

Console.WriteLine(p1);

Person p2 = new Person();

. . .

}

}

Page 21: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורי המרה

: Explicit -השימוש ב, דוגמה

class App

{

static void Main(string[] args)

{

Person p2 = new Person();

string str = "Shoshana 12";

p2 = (Person)str;

Console.WriteLine(p2);

}

}

Page 22: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

.מבוא•

.העמסת אופרטורים לוגיים•

.העמסת אופרטורים מתמטיים•

.העמסת אופרטורי המרה•

.העמסת אופרטורים אונריים•

Page 23: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים אונריים

אופרטורים אונאריים הינם אופרטורים בעלי

--האופרטור , ++האופרטור : כגון, אופרנד יחיד

'וכו

class Circle

{

public static Circle operator++(Circle c)

{

c.radius = c.radius + 1;

return c;

}

}

Page 24: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים אונריים

חייבים להיות ממומשים ) false -ו trueהאופרטורים

class Circle (:ביחד

{

public static bool operator true(Circle c)

{

if (c.x > 0 || c.x < 100 || c.y > 0 || c.y < 100)

return true;

return false;

}

public static bool operator false(Circle c)

{ . . . }

}

Page 25: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים אונריים

:דוגמה

Circle c = new Circle(1,2,12);

if (c)

Console.WriteLine("Legal");

else

Console.WriteLine("Illegal");

הפעלת האופרטור

true

Page 26: Web Servicesblog.csit.org.il/UpLoad/FilesUpload/OperatorOverloading... · 2017. 6. 18. · םירוטרפוא תסמעה רלק זרא : יעוצקמ יוויל  Web Services

העמסת אופרטורים

.מבוא1.

.העמסת אופרטורים לוגיים2.

.העמסת אופרטורים מתמטיים3.

.העמסת אופרטורי המרה4.

.העמסת אופרטורים אונריים5.

.ארז קלר: עריכה מקצועית

www.corner.co.il