View Full Version : سوال: قرار دادن & قبل اسم توابع
  
sourcecode
جمعه 20 فروردین 1395, 14:21 عصر
وقتی & رو قبل از اسم توابع مینویسیم چه اتفاقی میفته ... اصلا برای چی باید بنویسیمش ... کسی هست کامل توضیحش بده ممنون میشم ... مثلا :
int &func(int x)
{
    return x;
}
sourcecode
شنبه 21 فروردین 1395, 10:57 صبح
✅ مفهوم قرار دادن & قبل از اسم توابع در ++C
🔺برای  درک موضوع ابتدا Rvalue (راست مقدار) و Lvalue (چپ مقدار) رو توضیح میدم ,  به بیان ساده به عبارتی "چپ مقدار" میگویند که در سمت چپ یک عبارت قرار  دارد و میتواند مقداری را بگیرد و به عبارتی "راست مقدار" میگویند که در  سمت راست یک عبارت قرار دارد مثلا :
Lvalue = Rvalue
x = y;
🔹متغییر x "چپ مقدار" و متغییر y "راست مقدار" هست.
🔹نکته  : عبارات یا متغییر هایی را "چپ مقدار" میگوییم که قادر به دریافت داده  هستن مثل متغییر x و تمام ثوابت رشته ای ,کاراکتری و عددی ,و متغییر ها مثل  y "راست مقدار" هستند.
🔺خب حالا مرجع رو میگم , مرجع ها شبیه اشاره گرها هستن , یک مرجع به صورت زیر تعریف میشه :
  int y;
  cin >> y;
  int &x = y; // در هنگام تعریف مرجع باید مقدار رو بهش بدیم
  cout << x;
خب ما یه مرجعی به نام x تعریف کردیم که برابر متغییر y قرارش دادیم.
🔹دقت  بکنیم وقتی یه متغییر رو از نوع مرجع تعریف میکنیم به صورت "چپ مقدار"  میشود یعنی مقدار میگیره ( هم میتونه "راست مقدار" باشه هم "چپ مقدار").
🔺با  توضیحاتی که بالا دادم متوجه شدیم که وقتی از & قبل یه متغییر میذاریم  متغییر "چپ مقدار" میشه پس وقتی علامت & رو قبل اسم تابع قرار میدیم  یعنی داریم به تابع میفهمونیم که این تابع "چپ مقدار" هست یعنی میتونیم توی  این تابع با علامت = (انتساب دادن) بهش مقدار بدیم یعنی :
#include <iostream>
#include <string.h>
using namespace std;
int &func(int x, int y)
{
  return y;
}
int &func1(int x)
{
  return x;
}
int main()
{
  int x = 0;
  x = func(2, 4) = 10;
  cout << x; // x=10
  cout << endl;
  return 0;
}
x = func(2, 4) = 10;
این  خط مقدار 10 رو به تابع func میده ( مقدار قبلی تابع هرچی هست پاک میشه ) و  مقداری که به تابع func داده شد با = توی x هم ریخته میشه.
همچنین میتونیم با استفاده از تکنیک & خروجی توابع دیگر رو تو محاسبات استفاده کرد و مقدار حاصل رو توی تابع func بریزیم :
int main()
{
  int x = 0;
  x = func(2, 4) = func(1, 2) +  func1(2);
  cout << x;  // x = 4
  cout << endl;
  system("pause");
  return 0;
}
telegram = @Learncpp
ayub_coder
سه شنبه 12 مرداد 1395, 13:38 عصر
مقدار تابع دقیقا کجا نگه داری میشه. مطلب کمی گنگه. میشه بیشتر بسط بدید.
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.