Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
#70
#class
#struct
#call #by #value
#call #by #reference

✅ فراخوانی struct ها به صورت call by value انجام میشه که نیاز به & هست ولی فراخوانی class ها به صورت call by reference صورت میگیره یعنی :
#include "stdafx.h"

#include <iostream>

using namespace std;

🔹تعریف struct که برای مقدار دادن به داده هاش باید & توی تابع set_data گذاشت :
struct d

{

  int x;

  int y;

  int z;

void set_data(struct d &w, int x, int y, int z);

void show(struct d a);

};

void set_data(struct d &w, int x, int y, int z)

{

  w.x = x;

  w.y = y;

  w.z = z;

}

void show(struct d a)

{

  cout << a.x << " " << a.y << " " << a.z;

}

int main()

{

  d a{};

  set_data(a, 2, 3, 4);

  show(a);

  cout << endl;

  system("pause");

  return 0;

}

🔹تعریف class که برای مقدار دادن به داده هاش نیازی به استفاده از & نیست :
class test

{

public:

  void set(int a, int b, int c)

  {

    x = a;

    y = b;

    z = c;

  }

  void show()

  {

    cout << x << " " << y << " " << z;

  }

private:

  int x, y, z;

};

int main()

{

  test t;

  t.set(10, 20, 30);

  t.show();

  cout << endl;

  system("pause");

  return 0;

}

@Learncpp
#72
#reference #class #function #مرجع
#ampersand(&) #Rvalue #Lvalue #توابع
✅ مفهوم قرار دادن & قبل از اسم توابع در ++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;

}

@Learncpp