Download presentation
Presentation is loading. Please wait.
1
Operators Overloading
2
Agenda Introduction to Operator Overloading.
Overloading Mathematical Operators. Overloading Logical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
3
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
4
Introduction to Operator Overloading
הפעולות הבאות ברורת מאליהן: int num1 = 12; int num2 = 23; int num3 = num1+num2; if(num1 == num2) num3 +=5; הפעולות הבאות יעוררו תמיהה: Date d1 = new Person(...) Date d2 = new Person(...) Date d3 = d1-d2; if(d1 == d2) d3 += 5;
5
Introduction to Operator Overloading
פעילות אריתמטית לוגית על משתנים פשוטים היא דבר ברור, פעילות זו על אובייקטים מעוררת תמיהה, הכיצד ידע האופרטור כיצד לבצע את פעולתו? הכיצד ידע לאיזה שדה להוסיף ערך?, או על פי אילו שדות לבצע השוואה? כברירת מחדל האופרטורים אינם יודעים כיצד לפעול עם אובייקטים, אולם #C (כמו שפת ++C ) מסוגלת "ללמד" אותם. בהעמסה יש להקפיד על מספר כללים: נעמיס אופרטור רק במידה ויש משמעות ברורה מאליה להעמסה. נקפיד לשמור על כל המשמעויות המקוריות שלהאופרטור.
6
Introduction to Operator Overloading
Syntax : 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); } כל המתודות המעמיסות אופרטורים הן סטאטיות. מספר הפרמטרים שהמתודות מקבלות הוא כמספר האופרנדים. שם המתודה מתחיל במילה השמורה operator ולאחריה שם האופרטור המועמס.
7
Introduction to Operator Overloading
האופרטורים הניתנים להעמסה unary operators +, -, !, ~, ++, --, true, false binary operators +, -, *, /, %, &, |, ^, <<, >> comparison operators ==, !=, <, >, <=, >= אולם הם חייבים להיות מועמסים בזוגות: == עם =! , > עם < , =< עם => .
8
Introduction to Operator Overloading
האופרטורים שאינם ניתנים להעמסה +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= =, ., ?:, ->, new, is, sizeof, typeof, &&, ||
9
Introduction to Operator Overloading
המטרה בהעמסת אופרטורים היא לשפר את הקריאות של הקוד ובכך להימנע משגיאות וטעויות. לדוגמה: ללא אופרטורים myIntVar1 = Int.Add(myIntVar2, Int.Add(Int.Add(myIntVar3, myIntVar4), 33)); עם אופרטורים : myIntVar1 = myIntVar2 + myIntVar3 + myIntVar4 + 33;
10
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
11
Overloading Relational Operators
מחייבים העמסה בזוגות: < and > <= and >= == and != בהעמסת האופרטורים == ו- != יש לדרוס את המתודות Equals ואת GetHashCode .
12
Overloading Relational Operators
לדוגמה: class Circle { public static bool operator==( Circle c1,Circle c2) return c1.Equals(c2); } . . .
13
Overloading Relational Operators
לדוגמה: 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; } . . .
14
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
15
Overloading Mathematical Operators
ניתן להעמיס את האופרטורים + , - , * , / : 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; }
16
Overloading Mathematical Operators
ניתן להעמיס את האופרטורים + , - , * , / : 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; }
17
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
18
Overloading Conversion Operators
C# מאפשרת להגדיר מתודות העמסה מאוד מיוחדות User Defined Conversions. מתודות אלו מאפשרות לבצע המרה (Casting) מטיפוס לטיפוס באופן מפורש (Explicit) או מרומז (Implicit) על פי הגדרתנו.
19
Overloading Conversion Operators
דוגמה: class Person { ... public static implicit operator string (Person p) { string str; str = p.name + " " + p.age; return str; } 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;
20
Overloading Conversion Operators
דוגמה, השימוש ב- Implicit : class App { static void Main(string[] args) Person p1 = new Person("Moshe",12); Console.WriteLine(p1); Person p2 = new Person(); . . . }
21
Overloading Conversion Operators
דוגמה, השימוש ב- Explicit : class App { static void Main(string[] args) . . . Person p2 = new Person(); string str = "Shoshana 12"; p2 = (Person)str; Console.WriteLine(p2); }
22
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
23
Overloading Unary Operators.
אופרטורים אונאריים, אופרטורים בעלי אופרנד יחיד, כגון: ++, -- וכו' class Circle { . . . public static Circle operator++(Circle c) c.radius = c.radius + 1; return c; }
24
Overloading Unary Operators.
האופרטורים true ו- false : 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)
25
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Unary Operators. Overloading Operators Multiple Times.
26
Overloading Operators Multiple Times
ניתן להעמיס את המתודות המעמיסות אופרטורים: public static Time operator+(Time t1, int hours) {...} public static Time operator+(Time t1, float hours) public static Time operator-(Time t1, int hours) public static Time operator-(Time t1, float hours)
27
Agenda Introduction to Operator Overloading.
Overloading Relational Operators. Overloading Mathematical Operators. Overloading Conversion Operators. Overloading Operators Multiple Times.
28
Books Corner – הוצאת ספרים מקוונת
Books Corner – הוצאת ספרים מקוונת
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.