תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members
משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם הם אינם מוקצים בשטח המוקצה לכל עצם של אותה מח לקה הם מוקצים פעם אחת בלבד (ממש כמו משתנים גלובלים) ואולם הגישה אליהם היא לפי הרשאת הגישה שניתנה להם במחלקה משתנים סטטים מתפקדים ממש כאילו הוגדרו ב namesapce ששמו כשם המחלקה על משתנים סטטים יש להכריז בקטע קוד גלובלי, אז גם ניתן לאתחל אותם (אחרת יאותחלו ל- 0 ) 3 class const int m_grade; static int nofstudents; static int maxgrade; // The student's grade (int grade = maxgrade) : m_grade(grade) if (grade > maxgrade) maxgrade = grade; nofstudents++; // Errors // (int grade = m_grade) // (int grade) m_grade = grade; // (int grade): maxgrade(grade)... 4
(const & std): m_grade(std.m_grade) nofstudents++; ~() maxgrade = 0; nofstudents--; ; void Print() const cout << "Grade = " << m_grade << endl; 5 int ::nofstudents = 0; int ::maxgrade = 0; void main() Rafi; Moshe(97); vi(89); ::maxgrade++; // ERROR. Private variable CopiedFromMoshe = Moshe; * thenewstudent; thenewstudent = new (12); 6
מתודות סטטיות מתודות השייכות למחלקה מסוימת ואולם לא פועלות על עצם מסוים של המחלקה כאשר מתודות פונות לחברי מחלקה שאינם סטטיים (משתנים או מתודות) עליהן לציין את שם העצם המפורש (כי אין להן (this המתודות גלובליות ואולם הגישה אליהם היא לפי הרשאת הגישה שניתנה להן במחלקה מתודות סטטיות מתפקדות ממש כאילו הוגדרו ב namesapce ששמו כשם המחלקה 7 מתודות סטטיות השימוש בחברים סטטיים מיי תר למ עשה את השימוש ב namespace כמודול עבור טיפוס נתונים בודד ב'עולם האמיתי' משמש namespace לתאור מודול המורכב מעשרות מחלקות ויותר (לדוגמא: namespace std או (namespace microsoft::word בשפת Java השימוש בפונקציות גלובליות אסור מבחינה תחבירית. כל מחלקה המעוניינת לשמש נקודת פתיחה לביצוע יישום כלשהו מגדירה פונקציה סטטית בשם main() ובה היא מבצעת את כל פעולות האתחול הנדרשות 8
class const int m_grade; // The student's grade static int nofstudents; private: static int maxgrade; static * beststudent; (int grade = maxgrade):m_grade(grade) if(grade > maxgrade) maxgrade = grade; beststudent = this; nofstudents++; 9 (const & std) // as before... ~() if (beststudent == this) maxgrade = 0; beststudent = NULL; nofstudents--; void Print() const // as before... static int GetMaxGrade() return maxgrade; ; 10
int ::nofstudents = 0; int ::maxgrade = 0; * ::beststudent = NULL; void main() cout<<"we now have"<<::nofstudents<<endl; Rafi; Moshe(97); vi(89); cout<<rafi.nofstudents<<endl; cout<<::nofstudents<<endl; // cout<<"the max grade is:"<<rafi.maxgrade<<endl; cout<<"max grade"<<::getmaxgrade()<<endl; 11 עצמי ם מ וכ לי ם
עצמים מוכלים class () cout << " Constructor runnig..." << endl; (& a1) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; ; () cout << " Constructor runnig..." << endl; (& a2) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; ; 13 עצמים מוכלים class a1; a2; () cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; ; a; מה מדפיס הקוד הבא? 14
עצמים מוכלים a1; a2; () cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; void f(& a) cout << f() is running... << endl; ; a; a.f(a); ומה מדפיס הקוד הבא? 15 עצמים מוכלים a1; a2; () cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; void f( a) cout << f() is running... << endl; ; a; a.f(a); ועכשיו? 16
עצמים מוכלים a1; a2; () cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; f( a) cout << f() is running... << endl; return a; ; a; a.f(a); ועכשיו מה? 17 עצמים מוצבעי ם *a1; *a2; () cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; f( a) cout << f() is running... << endl; return a; ; a; a.f(a); מה מדפיס הקוד הבא? 18
עצמים מוצבעי ם *a1; *a2; () : a1(new ) cout << " Constructor runnig..." << endl; (& a) cout<<" Copy Constructor runnig..."<< endl; ~() cout << " Destructor runnig..." << endl; f( a) cout << f() is running... << endl; return a; ; a; a.f(a); ומה מדפיס הקוד הבא? 19 ויש ע ו ד בת רגיל הבית...