ارسال آرگومانها با توابع و ارجاع

    تا به حال ، در تمام توابعی که نوشتيم آرگومان ها با مقدار به توابع فرستاده می شدند . اين بدان معناست که هنگامی که توابع با آرگومانها فرا خوانی می شدند ، چيزی که ما به عنوان ورودی تابع ارسال می کرديم مقدار يا عدد بود و هرگز خود متغير به تابع فرستاده نشد ، به عنوان مثال تابع maximum در مبحث تعريف توابع را به صورت زير فراخوانی می کنيم :

int a=5, b=6, c=7, max;
max = maximum(a,b,c);

   کاری که در اينجا صورت می گيرد فراخوانی تابع و فرستادن مقادير موجود در a وb وc يعنی 5 و 6 و 7 به تابع می باشد . و خود متغيرها فرستاده نمی شوند .

   بدين صورت هنگامی که تابع maximum فراخوانی می شود ، مقدار متغيرهای x وy وz به ترتيب برابر 5 و 6 و 7خواهند شد و هرگونه تغييری روی متغيرهای x وy وz  در تابع ، تأثيری روی متغيرهای a وb وc نخواهد داشت . زيرا خود متغيرهای a وb وc به تابع فرستاده نشده اند بلکه  مقادير موجود در آنها به تابع  ارسال گشته اند .

   در برنامه نويسی مواردی پيش می آيد که بخواهيد از داخل تابع ، مقادير متغيرهای خارجی را تغيير دهيم ، به عنوان مثال در تابع maximum مقدار متغير a را از داخل تابع تغيير دهيم . برای نيل به اين هدف بايد از روش ارسال آرگومان ها با ارجاع استفاده کنيم . برای آنکه آرگومان تابعی با ارجاع فرستاده شود ، کافی است در پيش تعريف تابع بعد از تعيين نوع آرگومان يک علامت (&) بگذاريم و نيز در تعريف تابع قبل از نام آرگومان يک علامت (&) قرار دهيم . برای آشنايی با نحوه ارسال آرگومان ها با ارجاع به برنامه زير توجه کنيد .

#include <iostream.h>
 
void duplicate (int & , int & );
 
void main ( )
{
    int a=1 , b=2 ;
    cout << "a = " << a << " and b = " << b << endl;
    duplicate (a,b);
    cout << "a = " << a << " and b = " << b << endl;
}
 
void duplicate (int &x , int &y)
{
    x*=2;
    y*=2; 
}

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

a = 1 and b = 2
a = 2 and b = 4

در برنامه فوق متغيرهای a وb به تابع ارسال می گردند و سپس در دو ضرب می شوند. در اين برنامه مقدار متغيرهای a وb فرستاده نمی شود بلکه خود متغير فرستاده می شود و لذا هنگامی که دستورهای

x*=2;
y*=2;

اجرا می گردند مقادير دو متغيرa وb دو برابر می شود . در حقيقت x وy مانند نام مستعاری برای  a وb می باشند .

  هنگامی که متغيری با ارجاع فرستاده می شود هر گونه تغييری که در متغير معادل آن در تابع صورت گيرد عيناً آن تغيير بر روی متغير ارسالی نيز اعمال می گردد .

   مثال : تابعی بنويسيد که دو متغير را به عنوان ورودی دريافت کرده و مقادير آنها را جابه جا کند . از اين تابع در برنامه ای استفاده کنيد .

#include <iostream.h>
void change (int & , int &);
int main ( )
 {
      int a=1 , b=2 ;
      cout << "a is " << a << " and b is " << b << endl;
      change (a,b);
      cout << "a is " << a << " and b is " << b << endl;
      return 0;
  }
void change (int &x , int &y)
 {
      int temp;
      temp = y;
      y = x;
      x = temp;
 }
 

خروجی برنامه به صورت زير است :

a is 1 and b is 2
a is 2 and b is 1

برنامه فوق مقادير دو متغير a وb را توسط change با شيوه ارسال آرگومان با ارجاع جابه جا می کند .

   يکی ديگر از کاربردهای ارسال با ارجاع ، دريافت بيش از يک خروجی از تابع می باشد ، به عنوان مثال تابع prevnext در برنامه زير مقادير صحيح قبل و بعد از اولين آرگومان را به عنوان خروجی بر می گرداند .

#include <iostream.h>
 
void prevnext (int ,int & , int &);
 
void main ( )
{
    int x = 100 , y , z ;
    cout << "The input of prevnext function is "
         << x << endl;
    prevnext (x,y,z) ;
    cout << "previous =" << y <<",Next =" << z;
}
 
void prevnext (int input , int & prev , int & next)
{
    prev = input - 1 ;
    next = input + 1 ;
}

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

The input of prevnext function is 100
previous =99,Next =101

   همانطور که مشاهده می کنيد آرگومان input مقدار داده موجود در متغير x را دريافت می کند ولی آرگومان های prev وnext خود متغيرهای y وz را دريافت می کنند . لذا تغييرات روی متغيرprev وnext  بر روی y وz انجام می گيرد و توسط تابع مقدار دهی می شوند .


 

 

 

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

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

   توابع

   آرايه ها

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

   کلاسها

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

 
 
 
   
 
 
 

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