דף הבית  שיעורים  מחלקות  מחלקות משולבות - המשך
 
מחלקות משולבות - המשך
 
אתה יכול גם להגדיר אובייקט כמשתנה מחלקה של מחלקה אחרת:

class Date {
public:
 int day;
 int month;
 int year;
 Date();
 long GetJulian();
 void AddDays(int days);
};

class Employee {
public:
 char name[64];
 Date startDate;
 /* member functions declarations...*/
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

שים לב שבמידה שמחלקה מכילה אובייקט ממחלקה אחרת, הבנאי של האובייקט המוכל, יופעל לפני בנאי האובייקט המכיל (מכיוון שכל משתני המחלקה נוצרים לפני הפעלת הבנאי).
מחלקה יכולה גם להכיל בתוכה כמשתנה מחלקה מצביע לאובייקט של מחלקה אחרת, כמו לדוגמא:

class Gardener {
public:
 char *name;
 /* member functions declarations...*/
};

class Garden {
public:
 char *name;
 char *address;
 Gardener *pMyGardener;
 /* member functions declarations...*/
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

שים לב שיש למקם את הגדרת המחלקה Gardener, המכילה את המצביע לאובייקט, לפני הגדרת המחלקה Garden, המשמשת את המצביע שבמחלקה Gardener.
תיתכן גם הצבעה צולבת, שתי מחלקות המכילות מצביעים אחת אל השנייה, במקרה זה עליך להוסיף את הכרזת המחלקה שהגדרתה מופיעה אחרונה, כמו כאן:

class Garden;

class Gardener {
public:
 char *name;
 Garden *pMyGardens[3];
};

class Garden {
public:
 char *name;
 char *address;
 Gardener *pMyGardener;
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

כדאי גם שתזכור שברוב הפעמים שעליך לשלוח אובייקט כפרמטר לפונקציה, עדיף לך לעשות זאת ע"י שליחת משתנה הפניה לאובייקט ולא שליחת האובייקט עצמו, דבר שיגרום ליצירת העתק חדש של כל האובייקט ושליחת העתק זה לפונקציה, בדיוק כמו ב-C, שכאשר היה עליך לשלוח struct לפונקציה היית עושה זאת לרוב ע"י שליחת מצביע ל-struct.
דבר נוסף שכדאי שתדע הוא שניתן להפעיל על אובייקטים ומחלקות את האופרטור sizeof, בדיוק כמו על
struct:

Garden g;
sizeof(Garden);
sizeof(g);
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

הגודל שיתקבל הוא הגודל הכולל של כל משתני המחלקה, גם בעת הפעלת האופרטור על האובייקט, וגם בעת הפעלתו על המחלקה.