#120
#function #توابع
✅ نحوه استفاده از الگوی توابع در ++C
توجه کنیم هر کدی که مینویسیم باید بالای main باشه و اگه بخوایم تابع را پایین main بنویسیم تابع قادر به شناسایی داخل main نیست , و کامپایلر خطا میده پس چطوری باید تابع را پایین main بنویسیم که با خطایی مواجهه نشیم ؟!! برای اینکار باید نوع تابع , اسم تابع و پارامترهایش را بالای main بنویسیم (اصطلاحا به این روش الگوی تابع گویند) سپس بدنه تابع را پایین main بنوسیم
@Learncpp
#124#function #توابع
✅ توابع چگونه کار می کنند؟
وقتی کامپایلر به تابعی که توی main فراخوانیش کردیم رسید کنترل برنامه به جایی که تابع تعریف شده پرش می کند و پس از اینکه دستورات داخل تابع رو اجرا و به براکت بسته تابع رسید دوباره کامپایلر به صورت اتوماتیک دستورات بعدی بعد از فراخوانی تابع رو اجرا می کند
@Learncpp
#126#function #توابع
✅ نحوه پرش آرگومانها درون پارامترها
در تصویر بالا (telegram.me/Learncpp/415) می بینید که مقداری برای دو متغییر num1 و num2 از ورودی گرفته شده سپس این متغییرها را به عنوان آرگومان تابع max_number قرار دادیم و پس از فراخوانی آرگومانها به ترتیب درون پارامترهای تابع قرار میگیرد یعنی متغییر num1 به جای متغییر a و متغییر num2 بجای متغییر b قرار می گیرد سپس بر اساس تعیین بزرگی یا کوچکی مقدار متغییرها , خروجی درون اسم تابع قرار گرفته و برگشت داده میشود سپس چاپ میشود
@Learncpp
Telegram
Learning ©➕➕
#125
#function #توابع
✅ توابع چگونه کار می کنند
🔹نحوه پرش آرگومانها درون پارامترها
@Learncpp
#function #توابع
✅ توابع چگونه کار می کنند
🔹نحوه پرش آرگومانها درون پارامترها
@Learncpp
#127#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
اگر چند تابع درون تابع main داشته باشیم فراخوانی هر تابع به همانند تصویر زیر(telegram.me/Learncpp/418) خواهد بود
@Learncpp
Telegram
Learning ©➕➕
#128
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
@Learncpp
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
@Learncpp
#129#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
اگه تصویر بالا (telegram.me/Learncpp/418) رو با دقت نگاه کنین متوجه میشید که وقتی به تابعی رسید به صورت خودکار به تابع مورد نظر پرش کرده و آن تابع را اجرا و زمانی که به براکت بسته ({) رسید دوباره به تابع main برگشته و خط بعد از تابع را اجرا میکند به همین ترتیب الی آخر...
@Learncpp
Telegram
Learning ©➕➕
#128
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
@Learncpp
#function #توابع
✅ نحوه فراخوانی چندین تابع درون main
@Learncpp
#131#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟
🔹روش فراخوانی با مقدار (call by value)
❌ در روش فراخوانی با مقدار آرگومان ها درون پارامترها کپی می شوند و هرگونه تغییری در پارامترها تاثیری روی آرگومان ها ندارد
🔹روش فراخوانی با ارجاع (call by reference)
❌ روش فراخوانی با ارجاع چون آدرس آرگومان ها را به پارامترها میدیم پس با تغییر پارامترها مقدار آرگومان ها هم تغییر می کند یعنی اگر توی main یک اشاره گر را به عنوان آرگومان به یک تابعی بدیم و سپس تابع هر تغییری در این اشاره گر ایجاد کند باعث میشود مقداری که در داخل main به عنوان آرگومان دادیم نیز تغییر کند
@Learncpp
#132#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟
🔹روش فراخوانی با مقدار (call by value)
🔺در روش فراخوانی با مقدار دو نوع توابع میتونیم داشته باشیم:
💠 توابعی که هیچ مقداری رو به تابع فراخواننده بر نمی گردانند:
بعضی مواقع از تابعی استفاده میکنیم که نیازی به بازگشت مقداری نیست مثلا توابعی که پیغامی رو برای کاربر چاپ خواهد کرد
مثال)
برنامه ای که پس از فراخوانی تابع print متنی را چاپ می کند؟
#include <iostream>
#include <string>
using namespace std;
void print()
{
cout<<"Wow My God,C++ is Best And Powerful Programming Language\n";
cout<<”\ahere channel @Learncpp,I Love You PMC khhh”;
}
int main()
{
print();
return 0;
}
@Learncpp
#133#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟
🔹روش فراخوانی با مقدار (call by value)
🔺در روش فراخوانی با مقدار دو نوع توابع میتونیم داشته باشیم:
💠 توابعی که فقط یک مقدار را به تابع فراخواننده بر می گردانند:
در مواقعی نیاز داریم که پس از انجام یکسری محاسبات تابع جواب نهایی رو به عنوان یک مقدار برگشت بده که این مقدار برگشتی با استفاده از return انجام می شود
return عبارت;return (عبارت);مثال)
برنامه ای که بزرگترین عدد را پیدا کرده و نمایش دهد؟
#include <iostream>
#include <string>
using namespace std;
int max_number(int a,int b)
{
int temp=0;
if(a>b)
temp=a;
if(a<b)
temp=b;
return temp;
}
int main()
{
int num1,num2;
cout<<"enter num1 : ";
cin>>num1;
cout<<"\nenter num2 : ";
cin>>num2;
cout<<"\nBigest Number is : "<<max_number(num1, num2);
return 0;
}
❌ مقداری که توسط return برگشت داده می شود درون نام تابع قرار میگیرد پس میتوان در تابع main نام تابع را با متغیری انتساب یا اعمال محاسباتی را انجام داد به عنوان مثال اگر یک تابع sum از نوع int و x متغییری از نوع int باشد دستور زیر باعث می شود که مقداری که توسط retrun در نام تابع قرار میگیرد در x قرار می دهد
x=sum();همچنین در محاسبات نیز میتوانیم از نام تابع استفاده کنیم
x=x+sum();@Learncpp
#134#function #توابع
✅ روش های ارسال پارامتر ها به توابع در ++C ؟
🔹روش فراخوانی با ارجاع (call by reference)
روش فراخوانی با ارجاع چون آدرس آرگومان ها را به پارامترها میدیم پس با تغییر پارامترها مقدار آرگومان ها هم تغییر می کند یعنی اگر توی main یک اشاره گر را به عنوان آرگومان به یک تابعی بدیم و سپس تابع هر تغییری در این اشاره گر ایجاد کند باعث میشود مقداری که در داخل main به عنوان آرگومان دادیم نیز تغییر کند, برای روشن تر شدن موضوع یک مثال میزنم
کد زیر رو در نظر بگیرین:
int a=10;int *b=&a;کد بالا ابتدا یک متغییر a تعریف سپس مقدار 10 را به آن اختصاص میدهد سپس در خط بعدی اشاره گری از نوع int به اسم b تعریف و آدرس متغییر a را درون آن قرار داده این یعنی اینکه اگر هر تغییری در b دهیم همان تغییر در a نیز اعمال میشود مثلا اگر *b=12; بنویسیم مقدار متغییر a نیز 12 خواهد شد
مثال)
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int *b = &a;
*b = 15;
cout « a;//15
return 0;
}
همانطور که ملاحظه کردین با تغییر b مقدار a نیز تغییر کرد
❌ در روش فراخوانی با ارجاع به دلیل اینکه از اشاره گرها استفاده میکند و هنوز آموزش اشاره گرها رو درون کانال قرار ندادیم پس آموزش "روش فراخوانی با ارجاع" رو زمانی که اشاره گرها رو آموزش دادیم به طور مفصل توضیحش خواهم داد و ذکر این روش در اینجا فقط جنبه یاد آوری داشت
@Learncpp
#135#function #توابع
✅ توابع inline در ++C ؟
تابع زیر رو در نظر بگیرین:
#include <iostream>
using namespace std;
void compute (int a,int b);
int main()
{
compute(2,3);
compute(4,7);
.
.
.
compute(5,9);
compute(8,5);
return 0;
}
void compute(int a,int b)
{
if(a>b)
cout<<”Variable a is bigger b\n”;
if(a<b)
cout<<” Variable b is bigger a\n”
}
فرض کنید در main 30 بار تابع compute رو فراخوانی کنیم که این خودش باعث کندی برنامه میشه دلیلشم اینه که برای فراخوانی یک تابع باید آدرس تابع فراخوانی شده ذخیره سپس کامپایلر به تابع فراخوانی شده پرش کند و تابع را اجرا کند و پس از اینکه کامپایلر آخرین خط تابعی رو که پرش کرده بود رو اجرا کرد به آدرسی که تابع در main فراخوانی شده بر میگردد (آدرس تابع فراخوانده شده + اجرای تابع + برگشت به آدرس تابع فراخوانده شده) به همین دلایل وقتی به تعداد زیاد تابعی رو فراخوانی میکنیم باعث کندی برنامه خواهد شد
تصویر زیر (telegram.me/Learncpp/426) گویای مطلب هست
@Learncpp
Telegram
Learning ©➕➕
#136
#function #توابع
✅ فرآیند فراخوانی توابع
🔹نحوه فراخوانی تابع, اجرا و برگشت به تابع فراخوانده شده
@Learncpp
#function #توابع
✅ فرآیند فراخوانی توابع
🔹نحوه فراخوانی تابع, اجرا و برگشت به تابع فراخوانده شده
@Learncpp
#137#function #توابع
✅ توابع inline در ++C ؟
کامپایلر ++C برای رفع مشکل کپی کردن توابع زمان فراخوانی های مکرر تابعی به نام inline را معرفی و پیشنهاد میکند تابع inline قبل از اسم توابع قرار میگیرد و باعث می شود یک نسخه از دستوراتی که درون تابع قرار دارد در جایی که تابع فراخوانی میشود کپی شود یعنی بجای صدا زدن تابع کد تابع را در جایی که فراخوانی شده (main) کپی شود
@Learncpp