Programming?
11.4K subscribers
373 photos
645 videos
978 files
513 links
🏅Channel privileges

🎗Ninth year of operation
🎗Completely specialized members
🎗Transmitter in channel automation
🎗, ...

🎯 second channel Programming books 👇
@topbookit

🎯 third channel laptop👇
@sysline


👨🏻‍💻Admin channels : @coderme
Download Telegram
در نهایت باید در درون برنامه خود، تابع را صدا بزنیم که به اینکار فراخوانی توابع گفته می شود .
int main()
{
sample (a, b);
}
در فراخوانی توابع باید نام تابع و نام پارامترها را بیان کنیم که در اینجا به نام پارامترها، آرگومانهای تابع گفته می شود و دیگر نباید نوع آرگومانها را ذکر کنیم. در مورد نوع برگشتی تابع دو حالت وجو دارد. اول اینکه اگر بدون نوع برگشتی باشد لازم نیست از void استفاده کنیم و دوم اینکه اگر تابع دارای نوع برگشتی باشد باید آنرا برابر با مقدار متغیر از همان نوع قرار دهیم تا مقدار برگشتی را در متغیر مذکور ریخته و در جای مناسب از آن استفاده نماییم که در آینده به این مورد می پردازیم .

در شکل زیر شمای کلی تابع در برنامه نویسی را می بینید :
در کد زیر به بررسی یک مثال ساده از توابع می پردازیم :
#include <iostream.h>
#include <conio.h>

void print(void); // اعلان تابع

int main()
{
print(); // فراخوانی تابع
getch();
return 0;
}

void print( void ) // تعریف تابع
{
cout « "This is my first function!" ;
}
در بالای تابع main تابع را اعلان می کنیم طوری که نوع بازگشتی و پارامترها با نوعشان و نام تابع را ذکر می کنیم، سپس در خارج از تابع main تابع خود را تعریف کرده که برای اینکار هم باید تمامی انواع ورودی و خروجی بهمراه نامشان و همچنین نام تابع را بنویسیم و دستورات را در آن قرار دهیم و در نهایت در تابع main تابع خود را بدون ذکر انواع فراخوانی نماییم .

کد فوق تابعی را با نام print تعریف می کند که بدون خروجی و ورودی است که در بالای برنامه هم به همین ترتیب اعلان شده است و در فراخوانی آن، چون نوعی ندارد ما آنها را خالی می گذاریم .

کامپایلر اجرای برنامه را از تابع main شروع می کند و در خط بعدی به تابع print برمی خورد که فراخوانی شده است لذا در اینجا از تابع main خارج شده و وارد تابع print می شود. انواع ورودی و خروجی و نامشان را چک کرده و در صورت نبود خطا دستورات را انجام داده تا به انتهای تابع می رسد. در اینجا کامپایلر باز به تابع main برمیگردد و ادامه دستورات را اجرا می کند و در نهایت برنامه خاتمه میابد .
توابع inline در برنامه نویسی ++c :
یکی از مسائل مهمی که در برنامه نویسی به هر زبانی قابل توجه است اینه که تا جایی که میشود سرعت اجرای برنامه را بالا برد و زمان اجرای دستورات به حداقل برسد. پیاده سازی برنامه به کمک توابع، مقداری به زمان اجرای برنامه اضافه می کند هرچند که این زمان بسیار کم و در حد میلی ثانیه است اما باری را بر روی برنامه قرار می دهد و علت این تاخیر زمانی این است که در فراخوانی و اعلان توابع، کامپایلر کپی از تابع مو رد نظر را در حافظه قرار می دهد و در فراخوانی تابع به آدرس مذکور مراجعه می کند و در عین حال آدرس موقعیت توقف دستورات در تابع main را نیز ذخیره می کند که پس از پایان تابع به آدرس قبل برگردد و ادامه دستورات را اجرا کند، در نتیجه این آدرس دهی ها و نقل و انتقالات بین آنها بار زمانی را در برنامه ایجاد می کند که در صورت زیاد بودن توابع در برنامه و تعداد فراخوانیهای لازم زمان قابل توجهی خواهد شد .

برای رفع این مورد و بهینه سازی کدنویسی می توان از توابع inline در برنامه نویسی استفاده کرد. در واقع کامپایلر در برخورد با این توابع تعریف تابع را در حافظه کپی نمی کند بلکه با فراخوانی تابع در برنامه، کپی از آنرا در خود برنامه قرار می دهد که مورد آدرس دهی از میان خواهد رفت. بهتر است در جایی که تعریف تابع کم است و از تابع بیش از 2 یا 3 بار در طول برنامه استفاده نمی کنیم از این روش بهره بگیریم و بدانیم که inline از کلمات کلیدی در زبان C++ است. به نحوه تعریف یک تابع inline در برنامه نویسی C++ دقت کنید :
inline type name(parameters) —----> اعلان و تعریف تابع
{
...
}
نمونه مثال :
#include <iostream.h>
#include <conio.h>

inline int max(int a, int b) // اعلان و تعریف تابع بصورت یکجا
{
return a > b ? a : b;
}

int main()
{
clrscr();

cout « "maximum of 100 & 101 is : " « max(100, 101);

getch();
return 0;
}
در مورد تابع inline این نکته را باید دانست که تعریف تابع، در درون اعلان همان تابع انجام می شود .

تابع دیگری را می بینیم با نام clrscr که این تابع یک توابع از پیش ساخته شده زبان C++ هست و در فایل سرآیند conio قرار دارد و وظیفه آن پاک کردن صفحه نمایش است .
حوزه (ناحیه) تعریف و کار با متغیر ها در برنامه نویسی ++c :
بحث حوزه کاری متغیر ها و طول عمر آن در توابع و کلاس ها که در ادامه خواهد آمد بررسی می شود. ما در هر ناحیه ای که متغیر را تعریف می کنیم فقط در آن ناحیه می توانیم از آن متغیر استفاده کنیم و با خروج از آن ناحیه و ورود به ناحیه دیگر یا پایان برنامه، آن متغیر از بین خواهد رفت .

پیشتر گفته شد که متغیر ها نامی برای کلمات حافظه هستند که داده ها را در خود نگهداری می کنند. زمانیکه متغیری را تعریف می کنیم در حافظه محلی را به آن اختصاص می دهیم و در استفاده از آن، کامپایلر با استفاده از آدرس ذخیره شده آن متغیر به آن محل از حافظه رفته و یک کپی از مقدار محتویات داده ای متغیر را برای خود ایجاد می کند و از آن کپی در طول عمر متغیر و در برنامه استفاده می کند .

طول عمر یک متغیر با اتمام حوزه آن از بین رفته و کامپایلر آن کپی را دور می ریزد. منظور از حوزه متغیر همان تابع یا کلاس جاری است .
سربارگذاری توابع در برنامه نویسی C++ (Overloading functions) :
برای درک سربارگذاری توابع کد زیر را می بینیم :
#include <iostream.h>
#include <conio.h>

void func(int a){cout « a « "endl";};
void func(int a, int b){cout « a+b « "endl";};
void func(int a, int b, int c){cout « a+b+c;};

void main()
{
func(10);
func(10,10);
func(10,10,10);
getch();
}
در بالا می بینیم که سه تابع با نامهای یکسان func را تعریف و صدا زده ایم. درست است که نامها یکسان است اما تعداد آرگومانهای هر تابع با دیگری متفاوت است .

عمل فوق را سربارگذاری توابع گویند یعنی توابعی که دارای نام مشابه هستند ولی در تعداد آرگمانها و ترتیب ورودی آنها با یکدیگر تفاوت دارند. وقتی در تابع main در سطر 11 تابع func صدا زده می شود، کامپایلر با توجه به آرگومانهای آن متوجه می شود که از کدام یک از سربارگذاری تابع استفاده نماید .
مقدار دهی اولیه آرگومان های توابع (Initialization functions) :