Team Dark
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Latest topics
» GORG_HO3ein & TATALOO & PISHRO New Music
by saeid Tue Sep 22, 2015 12:51 am

» Black Cat Massanger Irani Started
by saeid Mon Jul 13, 2015 12:58 am

» telegram (BOTFATHER)
by saeid Mon Jul 13, 2015 12:34 am

» Wow Sorate Download Net RighTel
by saeid Wed Apr 15, 2015 1:52 pm

» بدباز پلاک یاب ورژن 2
by saeid Sun Apr 12, 2015 12:15 pm

» Internet 3G RighTel
by sarina Sat Apr 11, 2015 3:00 pm

» zapya For android
by saeid Sat Apr 11, 2015 12:52 pm

» معرفی بازی Boom Beach
by Mehdi Sat Apr 11, 2015 12:46 pm

» دانلود مستقیم adobe photoshop cs6
by Mehdi Sat Apr 11, 2015 12:45 pm

» مادرم هميشه دوستت دارم!! روزت مبارك
by saeid Fri Apr 10, 2015 1:53 am

» Topic Jame New Music
by saeid Wed Apr 08, 2015 3:25 pm

» Help Me To RighTel
by saeid Sun Apr 05, 2015 6:26 pm

» امکانات جدید وایبر
by Vampier Sun Apr 05, 2015 5:18 pm

» ربات کلش آف کلنز نسخه اندروید
by saeid Sun Apr 05, 2015 5:00 pm

» دانلــــــود سریال در حاشـــیه
by Mehdi Sat Apr 04, 2015 11:47 pm

Search
 
 

Display results as :
 

 


Rechercher Advanced Search

Who is online?
In total there is 1 user online :: 0 Registered, 0 Hidden and 1 Guest

None

[ View the whole list ]


Most users ever online was 13 on Fri Sep 15, 2023 3:07 pm

متغیرهای مرجع در ++C

Go down

متغیرهای مرجع در ++C Empty متغیرهای مرجع در ++C

Post by mamad Thu Mar 26, 2015 2:59 pm

متغیرهای مرجع در ++C
 
 
[rtl]زبان برنامه‌نویسی C از دو نوع متغیر پشتیبانی می‌کند: متغیرهای معمولی و اشاره‌گرها (متغیرهای حاوی آدرس حافظه). زبان ++C نوع سومی را به این مجموعه اضافه کرده است: متغیرهای مرجع (Reference).[/rtl]
[rtl]متغیرهای مرجع از روی دو نوع دیگر ساخته می‌شود و به نوعی می‌توان گفت نام مستعار برای متغیر اصلی به حساب می‌آید. برای تعریف متغیر مرجع از عملگر & استفاده می‌کنیم:[/rtl]
 
int a;
int &b = a;
 
[rtl]عبارت فوق متغیر b را مرجعی برای a معرفی می‌کند. از این کد به بعد متغیرهای a و b معادل هم هستند. یعنی تغییرات a در b و تغییرات b در a تاثیر می‌گذارد. در واقع a و b از یک محل حافظه استفاده می‌کنند؛ یا اینکه یک خانه حافظه، دو نام متفاوت دارد.[/rtl]
[rtl]کاربرد اصلی متغیرهای مرجع را می‌توان در انتقال اطلاعات به توابع و بالعکس دید. همانطور که می‌دانید در زبان C دو روش برای انتقال اطلاعات به تابع و بالعکس وجود دارد: مقدار و اشاره‌گر. زمانی که از روش اول استفاده می‌کنیم، آرگومان متناظر با پارامتر تابع فقط یک کپی از مقدار آن پارامتر را دارد. یعنی تغییر متغیر آرگومان تاثیری در متغیر پارامتر ندارد. مثلا:[/rtl]
 
#include< stdio.h >
void func( int a )
{
  a = 5;
}
 
void main( )
{
  int n = 6;
  func( n );
  printf( "%d", n );
}
 
[rtl]زمانی که تابع func فراخوانی می‌شود، یک کپی از مقدار n در a قرار می‌گیرد (یعنی 6). تک دستور تابع func مقدار a را تغییر می‌دهد. این تغییر هیچ اثری در n ندارد و مقدار n همان 6 چاپ می‌شود. چرا که n به صورت مقدار به تابع ارسال شده است.[/rtl]
[rtl]اگر بخواهیم از روش اشاره‌گر استفاده کنیم، برنامه فوق به این صورت خواهد شد:[/rtl]
 
#include< stdio.h >
void func( int *a )
{
  *a = 5;
}
 
void main( )
{
  int n = 6;
  func( &n );
  printf ( "%d", n );
}
 
[rtl]با تغییراتی که اعمال شده، مقدار n در تابع قابل تغییر است. یعنی آخرین دستور برنامه مقدار 5 را برای n چاپ می‌کند.[/rtl]
[rtl]زبان ++C علاوه بر دو روش قبلی روش سومی هم دارد. در این روش از متغیرهای مرجع استفاده می‌شود. مثال بالا را یک بار دیگر، این بار با متغیر مرجع می‌نویسم:[/rtl]
 
#include< iostream.h >
void func( int &a )
{
  a = 5;
}
 
void main( )
{
  int n = 6;
  func( n );
  cout << n;
}
 
[rtl]متغیر a یک مرجع برای n معرفی شده است. پس تغییر a تاثیر مستقیم در n دارد. در نتیجه مقدار n در تابع قابل تغییر است. این برنامه هم مثل برنامه قبلی خروجی 5 دارد. در واقع متغیر مرجع همان کار اشاره‌گر را به صورت ساده‌تر انجام می‌دهد. چرا که برای متغیرهای مرجع نیاز به کار کردن با اپراتورهایی مانند & و * نیست.[/rtl]
[rtl]پارامترهای مرجع کاربرد جالب دیگری نیز دارند. فرض کنید یک کلاس با صدها تابع و متغیر عضو تعریف کرده‌اید، و تابعی دارید که یک متغیر از این نوع کلاس را دریافت کرده و بر اساس این داده‌ها، عملیاتی را انجام می‌دهد. به عنوان مثال:[/rtl]
 
void func( myclass a )
 
[rtl]با توجه به اینکه کلاس تعریف شده حجم زیادی دارد، انتقال اطلاعات بین برنامه و تابع به کندی انجام می‌شود. مخصوصا اگر مجبور باشید تابع را چندین و چند بار فراخوانی کنید (نظیر توابع مربوط به سربارگذاری عملگرها). در این حالت بهتر است تعریف فوق را با تعریف زیر عوض کنید:[/rtl]
 
void func( const myclass &a )
 
[rtl]این عبارت متغیر a را به عنوان مرجع پارامتر متناظرش تعریف، و انتقال اطلاعات از برنامه به تابع را لغو می‌کند. به عبارت ساده‌تر، با این تعریف، متغیر کلاس - با حجم بزرگ - از برنامه به تابع منتقل نشده و فقط a به عنوان مرجع (یا نام مستعار) برای پارامتر متناظرش شناخته می‌شود. به همین خاطر از عبارت const استفاده می‌کنیم، تا از تغییرات ناخواسته پارامتر تابع جلوگیری کنیم. [/rtl]
[rtl]حرفه‌ای‌ترین کاربرد متغیرهای مرجع مربوط به انتقال اطلاعات از تابع به برنامه است. شما می‌توانید یک متغیر مرجع را از تابع برگردانید. اما باید توجه داشته باشید که این مرجع مربوط به متغیر محلی تابع نباشد. چرا که با خروج از تابع متغیرهای محلی از بین می‌روند، و در نتیجه مرجع آنها بی‌معنی می‌شود. در واقع بیشتر مواقع از این روش در کلاس‌ها و برای متغیرهای عضو کلاس استفاده می‌شود.[/rtl]
[rtl]همانطور که قبلا عنوان کردم، مرجع یک متغیر با خود متغیر هیچ تفاوتی ندارد. این مساله باعث می‌شود که شما بتوانید از توابعی با مقدار بازگشتی مرجع در سمت چپ علامت تساوی (=) استفاده کنید! برنامه زیر را در نظر بگیرید:[/rtl]
 
#include< iostream.h >
 
int arr[ 3 ];
 
int &func( int i )
{
  return arr[ i ];
}
 
void main( )
{
  func( 0 ) = 2;
  func( 1 ) = 6;
  func( 2 ) = -2;
  cout << arr[ 0 ] << "\t" << arr[ 1 ] << "\t" << arr[ 2 ];
}
 
[rtl]زمانی که تابع func با مقدار صفر فراخوانی می‌شود، یک مرجع به عنصر اول آرایه بر می‌گرداند. در نتیجه دستور اول تابع اصلی، مقدار این عنصر را برابر 2 قرار می‌دهد. خروجی برنامه به این صورت خواهد بود:[/rtl]
 
2     6    -2
 
[rtl]این خاصیت متغیرهای مرجع، قدرت زبان ++C را بسیار بالا می‌برد. بزرگترین خدمت این روش به برنامه‌نویسان حرفه‌ای ++C، زمانی است که برنامه‌نویس قصد دارد سربارگذاری عملگرها (Operator Overloading) را انجام دهد.[/rtl]
[rtl]هنگام استفاده از متغیرهای مرجع به این نکات توجه کنید:[/rtl]
[rtl]1 - متغیرهای مرجع در C وجود ندارد و مختص زبان ++C است.[/rtl]
[rtl]2 - مرجع به متغیر مرجع نمی‌توان تعریف کرد. قطعه کد زیر کامپایل نمی‌شود:[/rtl]
 
int a , &b = a;
int &c = b;
 
[rtl]3 - آرایه‌ای از مرجع‌ها قابل تعریف نیست.[/rtl]
[rtl]4 - از مرجع‌ها برای ساختمان‌های بیتی نمی‌توان استفاده کرد.[/rtl]
[rtl]5 - اشاره‌گر به مرجع وجود ندارد.[/rtl]
mamad
mamad
Good Member
Good Member

Nimbuzz ID: : المديــــر@nim
Posts : 16
Join date : 2015-03-25
Location : uni.khoram abad

Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum