++C למתחילים
 
דף הבית>> פרק 4>> public & private >>הגדרת מחלקה

הגדרת מחלקה:

מחלקה אנו מגדירים בעזרת המילה השמורה class ולאחריה שם המחלקה , במקרה שלנו שם המחלקה הוא Date . לאחר מכן, מוגדרים בין סוגריים מסולסלים המשתנים והפונקציות השייכים למחלקה. שימו לב! ההגדרה של המחלקה מסתיימת בסימון נקודה פסיק ( ; ) . נהוג להגדיר מחלקה בקובץ שונה המסתיים ב - h.* ולאחר מכן להכליל קובץ זה בקובץ הקוד הכולל את פונקציית main על ידי הפקודה include# .  

class שם המחלקה    
{
משתנים
פונקציות
};
 

הצהרה על מחלקה:

כפי שכבר ראינו בפונקציות שניתן להצהיר על פונקציה לפני הגדרתה, כך גם במחלקות, ניתן להצהיר על מחלקה עוד לפני ההגדרה. במקרה כזה ניתן יהיה להשתמש במחלקה למרות שעדיין לא הוגדרה בפועל וזאת כיוון שההצהרה על המחלקה "אומרת" למהדר שהמחלקה תוגדר בהמשך. הצהרה על מחלקה תיכתב כמו שורת ההגדרה של מחלקה, רק שבסופה יהיה נקודה פסיק ( ; ).  

;class Date  

פונקציות ומשתנים השייכים למחלקה: (האופרטור :: )

על מנת לשייך פונקציה או משתנה למחלקה יש להצהיר עליהם בהגדרת המחלקה. פונקציות ומשתנים השייכים למחלקה נקראים "חברים" (members). במידה ונרצה להגדיר פונקציה השייכת למחלקה מחוץ לה נשתמש באופרטור :: . אופרטור זה משמש עבור שיוך של פונקציה למחלקה. לדוגמה : ()Date::print כאן אנו משייכים את הפונקציה ()print למחלקה Date.  

אוביקטים במחלקה:

כעת לאחר שהגדרנו מחלקה , נתייחס אליה כמעין גלופה המאפשרת ליצור טפסים מאותו סוג של מחלקה. טפסים אלו נקראים אוביקטים ,והמאפיין כל אובייקט הוא שיש לו את כל תכונות המחלקה. בכל אוביקט נשמרים ערכים שונים עבור משתני המחלקה, וכאשר האוביקט מפעיל פונקציות השייכות למחלקה, הן פועלות על ערכי המשתנים של האוביקט. בדוגמה שלנו d1 ו d2 הם אוביקטים מסוג מחלקת Date .  

אופרטור . (נקודה):

האופרטור נקודה מהווה פנייה לאיבר, כלומר הוא משמש לצורך גישה למשתנים או לפונקציות של אובייקט. בדוגמה שלנו (d1.set(3, 6, 1999 כלומר אנו מפעילים את הפונקציה set עם הערכים (1999, 6, 3) של d1 , או ()d1.print אנו מפעילים את הפונקציה ()print על העצם d1.  

נשנה את הדוגמה הקודמת ונשתמש באופרטור טווח ההכרה:  

 
#include <iostream.h> 
#include <conio.h>
 
 class Date 
 { 
  private:
   int day;
   int month;
   int year;
  public: 
   void set(int d,int m,int y); 
   void print();
 }; 
 void Date::set(int d,int m,int y)
 { 
  day = d; 
  month = m;
  year = y; 
 }
 void Date::print() 
 { 
   cout<<"Date is:"<<day<<"/"<<month<<"/"<<year<<endl;
 }
  int main()
  {
   Date d1,d2;
   d1.set(3,6,1999);
   d2.set(3,4,1990);
   d1.print();
   d2.print();
   getch();
   return 0;
  }  
 

הסבר התוכנית: בתוכנית זו השתמשנו באופרטור טווח ההכרה "::". אופרטור זה להזכיר נועד להגדרת פונקציה כחלק ממחלקה כאשר היא נכתבת מחוץ להגדרת המחלקה. בתוכנית שלנו הצהרנו על הפונקציות set ו print בתוך המחלקה Date אך כמו שנשים לב הגדרת הפונקציה נמצאת מחוץ למחלקה לכן אנו משתמשים באופרטור טווח ההכרה :: . השורה (void Date::set(int d,int m,int y משמעותה: void הוא הערך המוחזר של הפונקציה set. אחרי כן כתוב שם המחלקה: Date ואז :: כלומר מה שנמצא מימין ל :: שייך למחלקה שנמצאת משמאל ל :: . ולבסוף רושמים את שם הפונקציה כולל המשתנים שהיא מקבלת . אחרי שורה זו ובתוך סוגריים מסולסלים אנו רושמים בעצם את תוכן הפונקציה.  

הקודם הבא