1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו
2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר יוצר. הכרחי עבור מחלקות המבצעות הקצאות זיכרון דינאמי. דוגמאות.
3 בנאי העתקה דוגמא Class Time { bool islater( Time other ); }; int main() { Time t1(12,31,14); Time t2(t1); // copy constructor Time t3(12,29,13); t1. islater(t3) ; // copy constructor } // Copy constructor definition Time::Time( const Time& other ) { m_hour = other.m_hour; m_minute = other.m_minute; m_second = other.m_second; } // parameter must be a reference
4 אופרטור השמה השמת אובייקטים ע"י הפעולה "=" overloading(.)operator ניתן להגדיר אופרטור השמה. אם לא מגדירים, אז הקומפיילר יוצר. הכרחי עבור מחלקות המבצעות הקצאות זיכרון דינאמי. השמה בעת בנייה תפעיל את בנאי ההעתקה. בנאי העתקה ואופרטור השמה מוגדרים באופן עקבי. דוגמאות.
5 אופרטור השמה דוגמא int main() { Time t1(12,31,14); Time t2; t2 = t1; // assignment operator } Time t3 = t1; // surprise : copy constructor // Assignment operator definition Time& Time::operator=( const Time& other ) { } if (this!= &other) { } return *this; m_hour = other.m_hour; m_minute = other.m_minute; m_second = other.m_second;
6 העתקה עמוקה ורדודה דוגמא
7 ניהול זיכרון דינאמי הקצאה ושחרור של זיכרון דינאמי בעזרת הפקודות, new. delet הקצאה: Time* timeptr = new Time(12,0,0); double* doubleptr = new double(3.1415); )הקצאה, בניה, החזרת כתובת, השמה(. הקצאת מערך: Time* timearr = new Time[10]; double* doublearr = new double[5]; )הקצאת זיכרון לכל המערך, בניה של כל תא במערך, החזרת כתובת לתחילת המערך, השמה(.
8 שחרור: delete timeptr; delete doubleptr; )הריסת האובייקט שמצביעים עליו, שחרור זיכרון(. שחרור מערך: delete[] timearr; delete[] doublearr; )הריסת כל אחד מתאי המערך, שחרור כל זיכרון המערך(. זהירות: delete timearr; ישחרר רק את התא הראשון של המערך.
9 קביעות )const( const מאפשר למשתנים להשתנות רק אם זה אכן נחוץ. הרשאה מינימאלית מספקת הגנה ואנקפסולציה. משתנים קבועים מטיפוסים בסיסיים int(,int* const,const.)const int* const,int* כללי המרה. אובייקטים קבועים. פונקציות מחלקה קבועות. פונקציה בונה ופונקציה הורסת לעולם אינן מוגדרות כקבועות. ארגומנטים קבועים של פונקציה. ערך החזרה קבוע מפונקציה. דוגמא 3_7.1
10 רשימת אתחול מתייחסת לבנאים בלבד. מאתחלת את תכונות האובייקטים. תכונות האובייקט מאותחלות לפני הקוד המופיע בגוף הבנאי ברירת מחדל או ע"י רשימת אתחול(. ניתן לאתחל כל תכונה של אובייקט בעזרת רשימת אתחול. חובה לאתחל כל תכונה קבועה וכל תכונה המוגדרת כהפניה. יעילות. שימושי עבור אובייקטים מורכבים וירושה. דוגמא. דוגמאות נוספות 7.4 7.5, )באופן
11 מחלקות מורכבות נתייחס לאובייקט המכיל אובייקטים אחרים. הבנאי של המחלקה המורכבת בדרך כלל יכלול תיאור של בניית האובייקטים הנכללים בו. אם אין התייחסות לבנייה של האובייקטים הנכללים אז יהיה שימוש בבנאי ברירת מחדל. דוגמאות. סדר הבנייה וההריסה. דוגמא 10_7.6. דוגמא.
12 מחלקות ופונקציות חברות עקיפה של עקרון ההסתרה. לצורך פשטות או ביצועים. ניתן להגדיר פונקציה או מחלקה שלמה בעלת גישה לתכונות פרטיות של מחלקה אחרת. הגדרה בעזרת. friend דוגמא. יחס של חברות אינו סימטרי ואינו טרנזיטיבי. שימושי במיוחד בהגדרת מחלקות עזר. דוגמאות.
13 המצביע this מאפשר לאובייקט להתייחס לכתובתו. הכתובת היא אינה תכונה של האובייקט.)not a data member( ניתן להחזיר ערך זה מפונקציה. שימושי עבור הפעלה חוזרת של פונקציות. דוגמא 7.13. דוגמא 16_7.14.