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

פונקציות בנאי ומפרק (constructors ו destructors):

פונקציית בנאי: עד כה נהגנו לאתחל משתנים רגילים בצורה הבאה :  

int x;
float sum=8.5;
 

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

רשימת פרמטרים פורמליים)  שם המחלקה)
{

גוף הפונקציה

} 
 

פונקצית בנאי לא מחזירה ערך. היא מקבלת שם זהה לשם המחלקה . אסור לקרוא לפונקצית בנאי מתוכנית חיצונית בצורה רגילה.

פונקצית מפרק: בזמן שעצם מסיים את קיומו, אפשר להריץ פונקצית מפרק (destructors). מפרק כמו בנאי מקבל שם זהה לשם המחלקה, לכן כדי להבדיל בין בנאי לבין מפרק, לפני שם המפרק נוסיף ~ . פונקצית מפרק בדומה לפונקצית בנאי, לא מחזירה ערך, אבל היא ניתנת להרצה מתוכנית חיצונית (main) בצורה רגילה. פונקצית בנאי תרשם בצורה הבאה:  

~רשימת פרמטרים פורמליים)  שם מחלקה) 
{

גוף הפונקציה ;

}
 

דוגמה לתוכנית הכוללת פונקצית בנאי ומפרק:  

#include <iostream.h> 
#include <conio.h>  
    class Point 
    { 
      private: 
      int x , y; 
      public:  
      Point()    //default constructor 
    {
    x=0;  
    y=0;  
    } 
    Point(int valX, int valY)   //constructor 
    { 
      x=valX; 
      y=valY; 
    } 
    ~Point()   //destructor 
    { 
      cout<<"GoodBye"<<endl;
    } 
    void set_x(int val) 
    { 
      x=val;  
    } 
    int get_x() 
    {
      return x;  
    } 
    void set_y(int val) 
    {
      y=val;  
    } 
    int get_y() 
    {
      return y; 
    } 
    void show() 
    {
      cout<<"x="<<x<<"y="<<y<<endl; 
    } 
    };  
    void main() 
    { 
       Point p1(15,10); 
       Point p2; 
       cout<<"The first point :"; 
       p1.show();  
       cout<<"The second point :"; 
       p2.show(); 
       getch(); 
    } 
 

פלט התוכנית:

The first point :x=15 y=10

The second point :x=0 y=0

GoodBye

GoodBye  

הסבר התוכנית: הגדרנו מחלקה בשם Point. בקטע public הגדרנו שתי פונקציות בנאי. האחת בנאי ברירת מחדל שלא מקבלת נתונים ומאתחלת את שני המשתנים x ו y בערך 0, השניה מאתחלת את x ו y במשתנים valX ו valY. לאחר מכן מוגדרת פונקצית מפרק . בפונקצית main אנו יוצרים אוביקט p1 של מחלקת Point ומעבירים לפונקצית הבנאי שלו את הערכים 15 ו 10. כמו כן אנו יוצרים אוביקט נוסף p2 וכיוון שהוא לא מקבל ערכים לאיתחול, אזי מופעלת פונקצית בנאי ברירת המחדל.  

הקודם הבא