قبلا یادآوری شد که اعضای یک کلاس اعم از داده ها یا توابع دارای 3 نوع سطح دسترسی می باشند که شامل دسترسی خصوصی private و دسترسی عمومی public و دسترسی حفاظت شده protected است .
اگر داده ها و توابع عضو یک کلاس از نوع private تعریف شوند فقط داده ها و توابع درونی آن کلاس در داخل همان کلاس می توانند به آنها دسترسی داشته باشند و هیچ جزء دیگری در بیرون از کلاس حتی شی ساخته شده از همان کلاس هم اجازه و توانایی دسترسی و کار با آنها را ندارند مگر تابعی را تعریف نماییم که در اصطلاح دوست(Friend) کلاس مورد بحث باشد .
پس تابع دوست یک کلاس، تابع ویژه ای است که می تواند به تمامی اعضای کلاس
حتی اعضای private نیز دسترسی داشته باشد. تفاوتی نمی کند که تابع دوست
کلاس را عمومی یا خصوصی تعریف نماییم. یک تابع دوست کلاس طبق الگوی زیر
تعریف می شود که باید از کلمه کلیدی friend در ابتدای آن استفاده نمود :
friend type FunctionName(Parameters List...) { Function Body... }
مثال) به اتفاق یکدیگر مثالی ابتدایی از تعریف تابع دوست کلاس و نحوه بکارگیری آن در کلاس را بررسی می نماییم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Accumulator { private: int m_nValue; public: Accumulator() { m_nValue = 0; } void Add(int nValue) { m_nValue += nValue; } // Make the Reset() function a friend of this class friend void Reset(Accumulator &cAccumulator); }; // Reset() is now a friend of the Accumulator class void Reset(Accumulator &cAccumulator) { // And can access the private data of Accumulator objects cAccumulator.m_nValue = 0; } |