توابع دوست و کلاس های دوست

   تابع دوست يک کلاس در خارج از حوزه آن کلاس تعريف می شود اما همچنان به اعضای غير عمومی آن کلاس دسترسی دارد. توابع تنها (توابعی که عضو کلاسی نمی باشند) و يا توابع عضو يک کلاس می توانند به عنوان دوست کلاس ديگری تعريف گردند. برای تعريف يک تابع به عنوان دوست يک کلاس، پيش تعريف تابع را در آن کلاس به همراه کلمه friend می آوريم.

class Count{
    friend void setX(Count & , int);
    int x;
}    

   در دستور فوق تابع setX به عنوان دوست کلاس Count در نظر گرفته می شود. برای اينکه تمام توابع عضو کلاسی با نام classTwo به عنوان توابع دوست کلاس ديگری با نام classOne در نظر گرفته شوند. دستور زير را در تعريف کلاس classOne می آوريم:

friend class classTwo;

   در برنامه زير تابع setX به عنوان دوست کلاس Count در نظر گرفته شده است لذا اجازه دستيابی به عضو داده x از کلاس Count را دارا می باشد. ضمنا بهتر است که توابع دوست در ابتدای تعريف اعضای کلاس ، تعريف گردند.

#include <iostream.h>
 
class Count {
  friend void setX( Count &, int ); 
 
  public:
    Count(): x( 0 ) // initialize x to 0
    { 
      // empty body
    }
 
    void print() const 
    { 
      cout << x << endl; 
    }
 
  private:
    int x;
};
 
void setX( Count &c, int val )
{
  c.x = val; // legal: setX is a friend of Count
}
 
void main()
{
  Count counter;
 
  cout << "counter.x after instantiation: ";
  counter.print();
 
  setX( counter, 8 ); // set x with a friend
 
  cout << "counter.x after call" 
       <<"to setX friend function: ";
  counter.print();
}

   خروجی برنامه فوق به صورت زير می باشد:

counter.x after instantiation: 0
counter.x after call to setX friend function: 8

   در برنامه فوق توابع عضو کلاس Count در داخل کلاس تعريف شده اند. همچنين عضو داده خصوصی x ، توسط دستور زير با عدد 0 مقدار دهی اوليه شده است.

Count(): x( 0 )

 

 

 

   معرفی کامپيوتروبرنامه نويسی

   ساختارهای کنترلی

   توابع

   آرايه ها

   اشاره گر ها و رشته ها

   کلاسها

   گرانبار کردن عملگر ها

 
 
 
   
 
 
 

حق کپی رایت محفوظ می باشد