Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.

Similar presentations


Presentation on theme: "תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות."— Presentation transcript:

1 תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות

2 Function Templates המטרה: פונקציות גנריות (מתאימות לכל טיפוס נתונים) בלי שנצטרך להגדירן מחדש. intint void swap (int& x, int& y) { int int temp = x; x = y; y = temp; } doubledoube void swap (double& x, doube& y) { double double temp = x; x = y; y = temp; } PointPoint void swap (Point& x, Point& y) { Point Point temp = x; x = y; y = temp; }

3 Function Templates template template TT void swap (T& x, T& y) { T T temp = x; x = y; y = temp; } הגדרת הפונקציה כ-template רשימת הפרמטרים בתוך שימוש בפרמטר ה-template int main(){ int i1 = 0, i2 = 1; swap(i1, i1); Point p1(2,7), p2(4,3); swap(p1, p2); } הקומפיילר יגדיר את הפונקציה swap(int&, int&) הקומפיילר יגדיר גם את הפונקציה swap(Point&, Point&)

4 Function Templates template T min (T x, T y) { return (x<y)?x:y; } int main() { inti = 3; doubled = 1.0; cout<<min(i,d)<<endl; // error … } הפונקציה min כפי שהיא מוגדרת צריכה לקבל שני ארגומנטים מאותו טיפוס

5 Function Templates template void swap (T& x, S& y) { T temp = x; x = y; y = temp; } אפשר להגדיר template שמקבל יותר מפרמטר אחד. למשל: שימו לב שבפונקציה הזאת עדיין יש הצבה של שני משתנים מטיפוסים שונים וזה עלול לגרום לאזהרות

6 Function Templates template T min (T x, T y) { return (x<y)?x:y; } int main() { inti = 3; doubled = 1.0; cout (i,d)<<endl; // o.k. … } אפשר גם לקרוא לפונקציה עם טיפוס ספציפי, לדוגמא:

7 Function Templates מה קורה ב- overloading? כיצד מחליט הקומפיילר לאיזו פונקציה לקרוא כאשר יש יותר מפונקציה אחת מתאימה? סדר העדיפויות הוא: 1.התאמה מדויקת לפונקציה שהיא לא template 2.התאמה מדויקת בעזרת שימוש ב-template 3.התאמה עם המרה לפי הסדר הבא: a)המרות שמרחיבות טיפוס אך מאותו סוג (int  long) b)המרות סטנדרטיות (int  double) c)המרות שהמתכנת הגדיר (char*  String) רצוי להשתמש בשמות שונים לפונקציות template וכאלו שאינן template על מנת למנוע בלבול

8 Class Template ניתן להגדיר גם מחלקה בעזרת תבנית נוח בייחוד במחלקות המגדירות מבני נתונים –בעזרת התבנית מבנה הנתונים יוכל להכיל נתונים מטיפוסים שונים

9 Class Templates template template class Array { int size; T T *data; public: T explicit Array(int s=0){size = s; data = new T[size];} Array(const Array &a); ~Array() {delete[] data;} Array& operator=(const Array &a); T T& operator[](int i); Array& resize(int s); };

10 Class Templates template template T T& Array ::operator[](int i) { if((i size-1)) exit(1); return data[i]; } template template Array & Array ::resize(int s) { TT T* New = new T[s]; for(int i=0; i<s && i<size; i++) New[i] = data[i]; delete[] data; data = New; size = s; return *this; } ! הגדרת member functions שהן template חייבת להיות בקובץ header אחרת linkage error

11 Class Templates int main() { Array a(5); Array b(6); Array c(10); Array > mat; } שימו לב לרווח ! ללא הרווח זה אופרטור <<

12 דוגמא: רשימה מקושרת


Download ppt "תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות."

Similar presentations


Ads by Google