با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش ++C در خدمت شما دوستان هستیم . در بخش قبلی با کنترل دسترسی در وراثت آشنا شدید، در این جلسه قصد داریم تا به آموزش توابع و کلاس دوست در ++C بپردازیم.
استفاده از کلمه کلیدی friend قبل از نام توابع و کلاس های غیر عضو، آن ها می توانند به اعضا private یک کلاس دسترسی داشته باشند.
مکانیزمی در ++C وجود دارد که اجازه می دهد توابع و کلاس های غیر عضو یک کلاس، به اعضای private آن کلاس دسترسی داشته باشند.
برای اعلان یک تابع دوست به صورت زیر عمل می کنیم:
1 2 3 4 5 6 | class class_name { ... .. ... friend return_type function_name(argument/s); ... .. ... } |
تابع دوست حتما باید در بدنه کلاس تعریف شود. (فرقی نمی کند که public یا private باشد)
حالا می توانیم تابع دوست را مانند یک تابع معمولی تعریف کنیم: (در تعریف کلمه کلیدی friend استفاده نمی شود)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class className { ... .. ... friend return_type functionName(argument/s); ... .. ... } return_type functionName(argument/s) { ... .. ... // Private and protected data of className can be accessed from // this function because it is a friend function of className. ... .. ... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> using namespace std; class Distance { private: int meter; public: Distance(): meter(0) { } //friend function friend int addFive(Distance); }; // friend function definition int addFive(Distance d) { //accessing private data from non-member function d.meter += 5; return d.meter; } int main() { Distance D; cout<<"Distance: "<< addFive(D); return 0; } |
خروجی:
1 | Distance: 5 |
در اینجا تابع ذوست ()addFive داخل کلاس Distance تعریف شده است. بنابراین این تابع می تواند متغیر private به نام meter دسترسی داشته باشد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <iostream> using namespace std; // forward declaration class B; class A { private: int numA; public: A(): numA(12) { } // friend function declaration friend int add(A, B); }; class B { private: int numB; public: B(): numB(1) { } // friend function declaration friend int add(A , B); }; // Function add() is the friend function of classes A and B // that accesses the member variables numA and numB int add(A objectA, B objectB) { return (objectA.numA + objectB.numB); } int main() { A objectA; B objectB; cout<<"Sum: "<< add(objectA, objectB); return 0; } |
خروجی:
1 | Sum: 13 |
به طور مشابه مانند یک تابع دوست، یک کلاس نیز می تواند به صورت دوست تعریف شود.
1 2 3 4 5 6 7 8 9 10 11 12 | class B; class A { // class B is a friend class of class A friend class B; ... .. ... } class B { ... .. ... } |
هنگامی که یک کلاس به صورت friend تعریف می شود، تمام توابع آن کلاس نیز تابع دوست می شوند.
در مثال بالا تمام توابع عضو کلاس B توابع دوست کلاس A هستند.
بنابراین هر تابع عضو کلاس B میتواند به اعضا private کلاس A دسترسی داشته باشد. اما توابع عضو کلاس A نمی توانند به داده های کلاس B دسترسی پیدا کنند.
جلسه آموزش توابع و کلاس دوست در ++C نیز به پایان رسید.
در جلسه بعد به آموزش وابه مجازی در ++C خواهیم پرداخت. با ما همراه باشید
همچنین می توانید نظرات و سوالات خود را از طریق بخش نظرات سایت با ما در میان بگذارید.