توابع دوست کلاس (Friend) در سی پلاس پلاس


توابع دوست کلاس (Friend) در سی پلاس پلاس
برای خرید این درس نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

‌آموزش توابع دوست کلاس (Friend) در سی پلاس پلاس:


در این جلسه می‌خواهیم در مورد توابع دوست کلاس در زبان ++C توضیح دهیم. شاید مبحثی که در زبان‌های دیگر خیلی کمتر به آن پرداخته شده و در زبان سی پلاس پلاس بسیار قدرتمند می‌تواند به ما کمک دهد تا با کلاس‌ها کار کنیم. خیلی وقت‌ها اتفاق افتاده که شما  نیاز دارید برای ارتباط دادن بین چندین کلاس از این توابع استفاده کنید. در جلسات قبل گفتیم اعضای خصوصی کلاس قابل دسترسی توسط اشیا نیستند، یعنی بیرون از کلاس نمی‌توانیم به آن‌ها‌ دسترسی داشته باشیم که این یکی از محدودیت‌های بزرگ اعضای خصوصی کلاس می‌باشد. به همین خاطر یک متد عمومی تعریف می‌کردیم و می‌توانستیم از طریق آن به عضو خصوصی دسترسی داشته باشیم. برای درک بهتر این مبحث به مثال زیر توجه کنید:


فرض کنید در یک اداره رئیس را به عنوان عضو خصوصی و کارمندها را عضو عمومی در نظر بگیریم. می‌خواهیم یک نامه به رئیس بدهیم اما چون مستقیما نمی‌توانیم رئیس را ببینیم چاره‌ایی نداریم که از طریق کارمندها نامه را به رئیس برسانیم. در این صورت ما وابسته به یکی از اعضای عمومی کلاس هستیم. اما حالا فرض کنید یکی از دوستان رئیس را می‌شناسیم دیگر برای تحویل نامه نیاز نیست از طریق کارمندها این کار را انجام دهیم و هرجا که نیاز داشته باشیم می‌توانیم نامه را به آن دوست بدهیم تا به رئیس برساند. با این کار می‌توانیم به راحتی به اعضای خصوصی دسترسی داشته باشیم. تابع دوست کلاس مانند دوست رویس در این مثال می‌باشد که برای دسترسی به اعضای خصوصی دیگر نیازی نیست وارد کلاس شویم. توابع دوست عضو کلاس نیستند در واقع تابعی است که دوست کلاس می‌باشد و می‌توانیم از طریق آن به اعضای خصوصی کلاس دسترسی داشته باشیم. حتی قدرتمندتر از اعضای عمومی. اما درون کلاس آنها را می‌شناسند و با آن‌ها در ارتباط هستند.

مثال: در این برنامه برای دسترسی به اعضای خصوصی از تابع دوست استفاده می‌کنیم. تابع دوست را بیرون از کلاس تعریف می‌کنیم. تابع sum در این برنامه یک تابع دوست است که کار آن این است که دو نمونه از کلاس test را جمع کند. دو شی را از کلاس test با نام‌های test1 و test2 تعریف و مقداردهی می‌کنیم. برای تابع دوست، یک پیش الگو از تابع sum اولین خط کلاس خود قرار می‌دهیم و ابتدا تابع از کلمه کلیدی friend استفاده می‌کنیم. وقتی تابعی دوست یک کلاس است  اشیا آن می‌تواند به اعضای خصوصی خودشان دسترسی داشته باشند. در این برنامه t1,t2,temp می‌توانند به اعضای خصوصی خود دسترسی داشته باشند.

 

class Test
{
     friend  Test sum(Test t1 ,Test t2)

       private :
         int num1 , num2;

      public:
         Test ()
            {
             }
         Test(int a , int b)
           {
                num1=a;
                num2=b;
          }
          void Print()
           {
                cout<<”Num1 :” <<num1<<”\t Num2 :”<<num2<<endl;
           }
} ;

Test sum(Test t1 , Test t2)
 {
       Test temp;
       Temp.num1= t1.num1 + t2.num1;
       Temp.num2= t1.num2 + t2.num2;
        return temp;

      
 }

int main()
 {
       Test test1(10,20);
       Test test2(100,200);
       Test Temp= Sum(test1 , test2);
        Temp.Print();
 }


خروجی:
 

خروجی1


مثال: در این برنامه 3 نمونه از کلاس test را ضرب می‌کند.
نکته: یکی از ارزش‌های توابع دوست این است که می‌توانیم به آن‌ها ورودی از جنس کلاس با هر تعدادی بدهیم. اما نمی‌توانیم داخل یک کلاس تابعی تعریف کنیم که چندین ورودی از جنس خودش داشته باشد. در این برنامه تابع mul که یک تابع دوست می‌باشد دارای 3 ورودی از جنس کلاس test می‌باشد.

 


class Test
{
     friend  Test mul(Test t1 , Test t2 , Test t3)

       private :
         int num1 , num2;

      public:
         Test ()
            {
             }
         Test(int a , int b)
           {
                num1=a;
                num2=b;
          }
          void Print()
           {
                cout<<”Num1 :” <<num1<<”\t Num2 :”<<num2<<endl;
           }
} ;

Test Mul(Test t1 , Test t2 , Test t3)
 {
       Test temp;
       Temp.num1= t1.num1 * t2.num1 * t3.num1;
       Temp.num2= t1.num2 * t2.num2 * t3.num2;
        return temp;

      
 }

int main()
 {
      Test test1(2,4);
      Test test2(5,8);
      Test test2(1,3);
      Test Temp= Mul(t1 , t2 , t3);
      Temp.Print();
 }

 

خروجی:

 

خروجی2

 

 مثال: در این برنامه می خواهیم این فرمول  (num1+x)-(num2*z)+y را با استفاده از تابع دوست کلاس پیاده سازی کنیم.
 

class Test;
class MyClass
{  
    friend   int Fun(Test t1,MyClass m1)
    private:
    Int x,y,z;
    
    public:
     MyClass(int a , int b, int c)
     {
          x=a;
          y=b;
           z=c;
     }
         void Print()
           {
                cout<<”X :” <<x<<”\t Y :”<<y<<”\t Z :”<<z<<endl;
          }
};

class Test
{
     friend   int Fun(Test t1,MyClass m1)

       private :
         int num1 , num2;

      public:
         Test ()
            {
             }
         Test(int a , int b)
           {
                num1=a;
                num2=b;
          }
          void Print()
           {
                cout<<”Num1 :” <<num1<<”\t Num2 :”<<num2<<endl;
           }
} ;

int Fun(Test t1,MyClass m1)
{
    int temp=(t1.num1 + m1.x)-(t1.num2 * m1.z)+m1.y;
    return temp;
}


int main()
 {
      Test test1(2,3);
       MyClass myClass1(5,6,7);
      test1.Print();
      myClass1.Print();
      cout<<”Result is :”<<Fun(test1,myClass1);
 }

 

خروجی:

 

خروجی3

 

 

دوست درسمنی عزیز، امیدواریم از این آموزش لذت برده باشید.
برای یادگیری این مبحث می‌توانید این درس را تهیه کنید و از فایل‌ها و ویدئو این بخش استفاده کنید.
شما عزیزان می‌توانید سوالات خود را در بخش انجمن پرسش و پاسخ مطرح کنید و همچنین منتظر انتقادات و پیشنهادات مفید شما در بخش نظرات هستیم تا ما را در کیفیت بهتر آموزش‌هایمان یاری کنید.


با امید موفقیت و شادی برای شما دوست درسمنی عزیزsmiley

انجمن++C کاران درسمن

 

 


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

مشخصات دوره


مدرس دوره : مهدی عباسی
تعداد جلسات 16 جلسه
مدت زمان 621 دقیقه
حجم دوره 2/39 گیگابایت
سطح مهارت پیشرفته
وضعیت دوره پایان یافته
: میانگین امتیاز

70,000تومان
برای دسترسی به این دوره وارد یا عضو شوید.
مهدی عباسی
مهدی عباسی

درباره مدرس :

مدیر‌ عامل‌ شرکت آریا‌ نرم‌‌ افزار دارنده مدرک کارشناسی‌ ارشد مهندسی کامپیوتر 12‌ سال سابقه تدریس دروس کامپیوتر را در دانشگاههای دولتی، آزاد، پیام‌نور ملایر، شهیدشمسی‌پور تهران و تدریس برنامه‌نویسی در ... ر انیستیتو ایزایران، مجتمع فنی و موسسه راه‌آینده تهران دارا میباشد و تا به حال راهنمایی انجمنهای علمی دانشگاه و صدها پروژه دانشجویی را برعهده داشته است. تخصص اصلی: با داشتن گواهی‌نامه‌های معتبر تدریس از انیستیتو‌ ایزایران، راه آینده‌تهران و سازمان‌فنی‌حرفه‌ای، تدریس و آموزش‌ دروس کامپیوتر، ‌برنامه‌نویسی کامپیوتر و کلاسهای کنکور کارشناسی و کارشناسی‌ارشد میباشد.همچنین تجربه داوری و نظارت مسابقات برنامه‌نویسی کشوری‌ACM را در سالهای متعدد داشته و تیم مورد رهبری ایشان در 3سال متوالی مقام اول مسابقات کشوری را از آن خود کرده است.ایشان مقالاتی در زمینه شبکه‌های کامپیوتری، تکنیک‌های وزارت دفاع و ... به ثبت رسانده و مشاور و کارشناس در طراحی و برنامه نویسی بیش از 50‌برنامه کاربردی تحت وب و ویندوز و موبایل میباشد. افتخارات دیگر:کسب مقام دوم ایده‌های برتر در مسابقات استارت‌آپ و بکند کشوری را نام برد.بیشتر بدانید