سلام!

این جلسه (همان طور که از اسمش پیداست) قرار است به متغیرهای مرجع بپردازیم. سپس در جلسه ی بعد این مطلب را به مطلب جلسه ی قبل (سربارگذاری عمل گر ها) ارتباط می دهیم.

فرض کنید یک تابع نوشته اید که یک متغیر را به عنوان ورودی می گیرد و سپس مقدار آن را دو برابر می کند. کد آن چیزی شبیه کد زیر است؛

#include <iostream>

using namespace std;

void f( int *a){
    *a *= 2;
}

int main(){
    int a = 5;
    f( &a );
    cout << a << endl;
}

حالا می خواهیم از متغیرهای مرجع استفاده کنیم. کد زیر را در نظر بگیرید:

int &b = a;

این خط کد مانند این است که برای a اسم دیگری (b) تعریف کرده باشیم. یعنی در طول برنامه دیگر a با b فرقی نمی کند. برای همین می توانید کدی که در ابتدای برنامه گفته شد را مانند کد زیر بنویسید.

#include <iostream>

using namespace std;

void f( int &a){
    a *= 2;
}

int main(){
    int a = 5;
    f( a );
    cout << a << endl;
}

این مفهوم فایده های زیادی دارد. مثلا فرض کنید یک class تعریف کرده اید به نام Game که پر از متغیر و تابع است. قطعا اگر در طول برنامه یک object از این class را به یک تابع ورودی بدهید، کمی طول می کشد. می توانید برای راحتی کار از متغیر مرجع استفاده کنید. یعنی به جای این که بنویسید

void f( Game game);

بنویسید

void f( Game &game);

البته بهتر است در چنین حالتی از const هم استفاده کنید زیرا احتمالا نمی خواهید مقادیر درون game تغییر پیدا کنند. بنابراین در نهایت بهتر است بنویسید

void f( const Game &game);

از متغیرهای مرجع می توانید در خروجی توابع نیز استفاده کنید. کاربرد این را در جلسه ی بعد بهتر متوجه خواهید شد.

فعلا تمرین خاصی مد نظرم نیست. در جلسه ی بعد برای این مبحث تمرین ارائه خواهد شد.