|
توابع دوست و کلاس های دوست |
تابع دوست يک کلاس در خارج از حوزه آن کلاس تعريف می شود اما
همچنان به اعضای غير عمومی آن کلاس دسترسی دارد. توابع تنها
(توابعی که عضو کلاسی نمی باشند) و يا توابع عضو يک کلاس می توانند
به عنوان دوست کلاس ديگری تعريف گردند. برای تعريف يک تابع به
عنوان دوست يک کلاس، پيش تعريف تابع را در آن کلاس به همراه کلمه
friend
می آوريم.
class Count{
friend void setX(Count & , int);
int x;
}
در دستور فوق تابع
setX
به عنوان دوست کلاس
Count
در نظر گرفته می شود. برای اينکه تمام توابع عضو کلاسی با نام
classTwo
به عنوان توابع دوست کلاس ديگری با نام
classOne
در نظر گرفته شوند. دستور زير را در تعريف کلاس
classOne
می آوريم:
در برنامه زير تابع
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 مقدار دهی اوليه شده است.
|