:: پشتیبانی فنی ADSL به پارسی ::

::: ADSL - ویندوز - نرم افزار - سخت افزار - موبایل - لینوکس - آفیس - شبکه - برنامه نویسی :::

:: پشتیبانی فنی ADSL به پارسی ::

::: ADSL - ویندوز - نرم افزار - سخت افزار - موبایل - لینوکس - آفیس - شبکه - برنامه نویسی :::

:: پشتیبانی فنی ADSL به پارسی ::

تقدیم به تمام پشتیبانان ADSL که به رنج در تلاشند

*** تاسیس به سال 1389 در بلاگفا ***

بایگانی
پیوندهای روزانه
  • ۰
  • ۰

 

تابع در برنام نویسی ، جهت ایجاد ساختارهایی است که علاوه بر بخش بندی برنامه ، عمل ایرادیابی در برنامه نویسی را آسان تر می کند همچنین کتابخانه ها در زبان سی پلاس پلاس برای بعضی از امور ساخته نشده اند و نیاز داریم تا توابعی را خودمان تعریف کنیم و در برنامه نوسی با ++C با تابع می توان با نامی برای آن در هر کجای برنامه آن را فراخوانی کرد ، رایج ترین نوع تعریف تابع به صورت زیر است :

type name ( parameter1, parameter2, ...) { statements }

type : نوع مقدار تابع است مثل int و double و ...

name : تابع با این نام مشخص شده فراخوانی می شود مثل int my_def

parameter : تابع دارای متغیرهایی است که جلوی اسم آن نوشته می شود و می تواند از 1 تا چند مقدار داشته باشد این پارامترهای شبیه نوشتن متغیرها در زبان سی است ( برای مثال int x ) تابع با این پارامترها متغیرهای خواسته شده را از آرگومان های بخش های مختلف برنامه فراخوانی می کند هر پارامتر با علامت , از هم جدا می شوند

{ statements } : دستورات بدنه تابع داخل {} ( آکولاد ) نوشته می شود و مشخص می کند تابع چه کاری می خواهد انجام دهد

 

 

برای مثال :

// function example
#include 
using namespace std;

int addition (int a, int b)
{
  int r;
  r=a+b;
  return r;
}

int main ()
{
  int z;
  z = addition (5,3);
  cout << "The result is " << z;
}

 

این برنامه دارای دو تابع است یکی Addition و دیگری main،،، تابع main به صورت خودکار کار می کند و توابع دیگر با فراخوانی آن اجرا می شوند در مثال بالا تابع main با متغیر z از نوع int مشخص شده شروع می شود ، و درست بعد از آن اولین فراخوانی تابع شروع می شود و مجموع حاصل تابع Addition فراخوانی شده ، در واقع رفتار هر تابع شبیه به صدازدن آن به شکلی است که ساخته شده است ، در این مثال می توان حاصل جمع را با چند خط قبل تر مقایسه کرد :

مقایسه متغیرهای تابع

عبارت های جلوی هر تابع داخل () را آرگومان آن تابع می گویند که در فراخوانی تابع مطابق با مقادیر آن تابع هستند ، تابع 5 و 3 را ارسال می کند و با متغیر های تابع که a و b هستند مطابقت دارند

در درون تابع main عملیات جمع اول انجام شده و سپس بعد از پایان آن این main انجام می شود این 5 و 3 به متغیر های محلی برای a , b در تابع addition برگردانده می شوند

سپس در داخل addition ، یک متغیر محلی دیگر اعلام می شود (int r) و با عبارت r=a+b ، نتیجه a به علاوه b به r اختصاص می یابد. که برای این مورد، جایی که a 5 و b 3 است، به این معنی است که 8 به r اختصاص دارد ، حالا وضعیت نهایی در تابع همان ; return r می باشد

تابع addition را پایان می دهد و کنترل را به نقطه ای که تابع فراخوانی شده است برمی گرداند ، برای تابع main ، در این لحظه دقیق، برنامه مسیر خود را در بازگشت اصلی دقیقاً در همان نقطه ای که توسط فراخوانی به اضافه addition قطع شده بود، از سر می گیرد ، اما علاوه بر این، از آنجا که افزودن دارای یک نوع بازگشتی است، فراخوانی دارای یک مقدار ارزیابی می شود، و این مقدار، مقدار مشخص شده در عبارت بازگشتی است که جمع را به پایان می رساند ، در این مورد خاص ، مقدار متغیر محلی r، که در لحظه فراخوانی مقدار 8 داشت ، تابع addition دارای یک مقدار بازگشتی است در این حابت 8 به Z اختصاص می یابد و گویی کل عبارت تابع فوق به صورت (addition(5,3)) بوده که حالا 8 جایگزین آن شده است و حالا :

عبارت به صورت زیر نمایش داده می شود :

cout << "The result is " << z; 
 

حالت multiple بودن تابع که نشان می دهد می توان از تابع چندین بار استفاده و آن را فراخوانی کرد و محدود به یک بار استفاده در کل برنامه نمی شود :

برای مثال :

 

// function example
#include 
using namespace std;

int subtraction (int a, int b)
{
  int r;
  r=a-b;
  return r;
}

int main ()
{
  int x=5, y=3, z;
  z = subtraction (7,2);
  cout << "The first result is " << z << '\n';
  cout << "The second result is " << subtraction (7,2) << '\n';
  cout << "The third result is " << subtraction (x,y) << '\n';
  z= 4 + subtraction (x,y);
  cout << "The fourth result is " << z << '\n';
}

مانند مثال تابع addition یک تابع به نام subtraction داریم که می خواهیم عمل تفریق را در برنامه انجام بدهد در تابع main تابع مورد نظر چندین بار صدا زده می شود و در هر بار با توجه به متغیر های آن تغییرات متفاوتی را نشان می دهد در واقع در هر عبارت تابع با مقدار بازگشتی مورد نظر جایگزین شده است :

z = subtraction (7,2);
cout << "The first result is " << z;

این فرایند به صورت :

 cout << "The second result is " << subtraction (7,2);

سپس :

cout << "The second result is " << 5;

و 5 حاصل تفریق 7 و 2 می باشد :

بنابراین :

cout << "The third result is " << subtraction (x,y); 

در واقع آرگومان های کاراکتری همان عبارت های عددی هستند که به خوبی کار می کنند و جای x و y عدد های 2 و 5 رو قرار می دهند و با تفریق شدن عدد 3 رو برمی گردانند

و این عبارت که مشابه دیگر تفریقات :

z = 4 + subtraction (x,y);

نکته جالب اینکه در این تابع علوند و عملگر رو میشه با تابع نوشت و در عملیات تفریق استفاده کرد :

z = subtraction (x,y) + 4;

منطق تابع و بازگشت متغیر های آن را می توان با مثال دیگری نشان داد توجه داشته باشید که برای تمامی عبارت ها در تابع نوشتن سمیکالن لازم می باشد ( ; ) :

 

z = 4 + 2;    // same as z = 4 + subtraction (x,y);
z = 2 + 4;    // same as z = subtraction (x,y) + 4;

- توابع از نوع Void ( بدون نوع متغیر ) :

توابعی که در بالا گفته شد همگی به صورت :

type name ( argument1, argument2 ...) { statements }

نوشته می شوند این نوع متغیر تابع زمانی نوشته می شود که قرار است این متغیر بازگشت داده شود حالا اگر بازگشت داده نشود چه ؟ در این موارد از عبارت void استفاده می شود که یک مقدار خاص برای نشان دادن عدم بازگشت متغیر است به عنوان مثال تابعی که یک عبارت رو چاپ می کند ممکن است نیازی به بازگشت نداشته باشد :

 

// void function example
#include 
using namespace std;

void printmessage ()
{
  cout << "I'm a function!";
}

int main ()
{
  printmessage ();
}

 

void می تواند در لیست پارامتر تابع تعریف شود تا به صراحت نشان دهد تابع هنگام فراخوانی هیچ پارامتر واقعی رو دریافت نمی کند ، برای مثال عبارت printmassege :

 
void printmessage (void)
{
  cout << "I'm a function!";
}

توجه داشته باشید در زبان سی پلاس پلاس اگر پارامتری تابع نداشت حتما باید جلوی نام تابع () نوشته شود برای مثال این عبارت تابع نیست :

printmessage;

- عبارت Return در تابع main :

ممکن است متوجه شده باشید که نوع تابع main - int است اما در خیلی از کدها مشاهده می کنید که return مقداری را بر نمی گرداند اما در این موارد کامپایلر در زبان سی پلاس پلاس فکر می کند به صورت ضمنی این مقدار بازگشت داده شده است : ; 0 return

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

هنگامی که main صفر را برمی گرداند (به طور ضمنی یا صریح)، توسط کامپایلر به این صورت تفسیر می شود که برنامه با موفقیت به پایان رسیده است ،،، مقادیر دیگر ممکن است توسط main برگردانده شوند، هر چند در بسیاری از مواقع نیازی نیست Return در این تابع رخ دهد :

مقدار 0 : برنامه موفقیت آمیز بود

مقدار EXIT_Success : مانند آنچه در بالا گفته شد برنامه درست و موفقیت آمیز پایان یافته این کار توسط هدر انجام می شود

مقدار EXIT_FAILURE : برنامه به ایراد خورده و این در هدر قرار دارد

نکته : این return 0 به صورت ضمنی ( ضمنی در لغت به معنی بدون شرط و تصادفی بودن ) با 0 یک استثنا دشوار است اما برخی از نویسندگان زبان سی آن را مناسب می دانند و یک توضیح صریح و واضع قلمداد می کنند

 

- تعریف آرگومان ها با استفاده از مقادیر و reference ( در اینجا مرجع معنی شده ) آنها :

در توابعی که قبلا دیده شد، آرگومان ها همیشه با مقدار ارسال می شوند ،،، این بدان معناست که هنگام فراخوانی یک تابع، آنچه به تابع ارسال می‌شود، مقادیر این آرگومان‌ها در لحظه فراخوانی است که در متغیرهایی که توسط پارامترهای تابع نشان داده می‌شوند کپی می‌شوند. برای مثال، در نظر بگیرید:

int x=5, y=3, z;
z = addition ( x, y );

در این حالت جمع تابع 5 و 3 که به ترتیب کپی مقادیر x و y هستند ارسال می شود ،،، این مقادیر (5 و 3) برای مقداردهی اولیه متغیرهای تنظیم شده به عنوان پارامتر در تعریف تابع استفاده می شود،،، اما هر گونه تغییر این متغیرها در داخل تابع تأثیری بر مقادیر متغیرهای x و y در خارج از آن ندارد، زیرا x و y بودند ،،، خود به تابع در تماس منتقل نمی‌شوند، بلکه فقط کپی‌هایی از مقادیرشان در آن لحظه هستند

 

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

// passing parameters by reference
#include 
using namespace std;

void duplicate (int& a, int& b, int& c)
{
  a*=2;
  b*=2;
  c*=2;
}

int main ()
{
  int x=1, y=3, z=7;
  duplicate (x, y, z);
  cout << "x=" << x << ", y=" << y << ", z=" << z;
  return 0;
}

خروجی این برنامه x=2, y=6, z=14 می باشد
برای دسترسی به آرگومان های خود ، تابع پارامترهای خود را به عنوان مرجع اعلام می کند ،،، در C++ ، مراجع با علامت (&) به دنبال نوع پارامتر نشان داده می شوند، مانند پارامترهایی که در مثال بالا به صورت تکراری گرفته شده اند​​​

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

در واقع، a، b و c نام مستعار آرگومان‌های ارسال شده در فراخوانی تابع (x، y، و z) می‌شوند و هر تغییری در a در تابع در واقع تغییر متغیر x در خارج از تابع است ،، هر تغییری در b، y را تغییر می دهد و هر تغییری در c، z را تغییر می دهد ،،، به همین دلیل است که وقتی در مثال تابع duplicate مقادیر متغیرهای a، b و c را تغییر می‌دهد، مقادیر x، y و z تحت تأثیر قرار می‌گیرند

اگر تابع مورد نظر رو به صورت void duplicate (int a, int& b, int c) تعریف کنیم و یا به صورت void duplicate (int a, int b, int c) باشد متغیر ها با مرجع ارسال نمی شوند بلکه توسط مقدار ارسال می شوند اما کپی از مقادیر آنها ایجاد می شود در این صورت مقادیر برای x , y , z بدون تغییر خواهند بود یعنی همان مقادیر اولیه 1 و 3 و 7

 

- تاثیرگذاری const reference

فراخوانی یک تابع با پارامترهای گرفته شده توسط مقدار باعث می شود کپی هایی از مقادیر ساخته شوند ، این یک عملیات نسبتاً سبک برای انواع اساسی مانند int است، اما اگر پارامتر از نوع ترکیبی بزرگ باشد، ممکن است منجر به سربار خاصی شود برای مثال تابع زیر را در نظر بگیرید:

string concatenate (string a, string b)
{
return a+b;
}

این تابع دو رشته را به عنوان پارامتر (بر اساس مقدار) می گیرد و نتیجه الحاق آنها را برمی گرداند ،،، با ارسال آرگومان ها بر اساس مقدار، تابع a و b را مجبور می کند که کپی هایی از آرگومان های ارسال شده به تابع در هنگام فراخوانی آن باشند ،،، و اگر این رشته ها طولانی هستند، ممکن است به معنای کپی کردن مقادیر زیادی از داده ها فقط برای فراخوانی تابع باشد،،، اما اگر هر دو پارامتر مرجع باشند، می توان از این کپی به طور کلی اجتناب کرد :

آرگومان های مرجع نیازی به کپی ندارند ،، این تابع مستقیماً روی رشته‌هایی که به عنوان آرگومان ارسال می‌شوند (نام مستعار) عمل می‌کند، و حداکثر ممکن است به معنای انتقال نشانگرهای خاصی به تابع باشد ،،، در این راستا، نسخه‌ای از منابع گرفتن ترکیبی کارآمدتر از مقادیر نسخه‌گیری است، زیرا نیازی به کپی کردن رشته‌های گران‌قیمت برای کپی ندارد.

از طرف دیگر، توابع با پارامترهای مرجع عموماً به عنوان توابعی تلقی می شوند که آرگومان های ارسال شده را تغییر می دهند، زیرا به همین دلیل است که پارامترهای مرجع در واقع برای همین عمل هستند راه حل این است که تابع تضمین کند که پارامترهای مرجع آن توسط این تابع تغییر نخواهند کرد این را می توان با تعیین پارامترهای ثابت انجام داد:

string concatenate (const string& a, const string& b)
{
return a+b;
}

 

- Inline توابع :

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

برای مثال، تابع الحاق بالا ممکن است به صورت درون خطی اعلام شود:

inline string concatenate (const string& a, const string& b)
{
return a+b;
}

این به کامپایلر اطلاع می‌دهد که وقتی Concatenate فراخوانی می‌شود، برنامه ترجیح می‌دهد به جای انجام یک تماس معمولی، تابع به صورت درون خطی گسترش یابد. inline فقط در اعلان تابع مشخص می شود، نه زمانی که فراخوانی می شود inline برای توابع کوچک مناسب است و سرعت مراحل اجرا و فراخوانی را سرعت می دهد

- Declaring functions :

در C++، شناسه ها تنها زمانی می توانند در عبارات استفاده شوند که اعلان ( Declaring) شوند،،، به عنوان مثال، برخی از متغیر x را نمی توان قبل از اعلان با یک دستور استفاده کرد، مانند: int x; ،،، در توابع فراخوانی تابع باید قبل از main باشد و اگر قبل از آن باشد باید اعلان تابع در بالای آن آورده شود مثال زیر می خواهیم آرایه ای رو به کمک تابع بنویسم که مقادیر آرایه را چاپ کند ، در این مثال پروتایپ یا الگوی تابع قبل از تابع Main وارد شده است چون تابع را در پایین این تابع Main نوشته ایم ، این تابع در محل پایانی تابع main به صورت void printArray(int b[] , int count) نوشته شده است دقت کنید در فرم پروتایپ در داخل پرانتر آرگومان ها بدون نام متغیر ها نوشته شده اند چون اجباری در نوشتن آنها در تابع الگو یا پروتایپ نبوده است چون تابع main تابع printArray(a, 3) را صدا می زند تا تغییرات در بدنه اصلی تابع مورد نظر را بررسی کند مقادیر آرگومان در (int [] , int count) دقیقاَ برابر و متقابل با a , 3 هستند :

// Array + Function , www.adslfa.blogfa.com

#include
#include

using namespace std;

void printArray(int [] , int count); // Protype

int main()

{
int a[3] = {7, 5 , 8 } ;

cout<< " Array a : " ;

printArray(a, 3) ; // this do not use console do type Array a :

getch();

}

void printArray(int b[] , int count)

{
for(int i = 0 ; i < count ; i++ )
cout << b[i] << " " ;
}

- توابع Recursivity :

توابع بازگشتی ، به حالتی بازگشتی گفته می شود که می خواهیم پاسخ مسئله را باز کنیم و از آن به یک رابطه بازگشتی برسیم ،،، در این حالت تابع خودش را فراخوانی می کند کسانیکه با ساختمان داده ها آشنایی دارند این مبحث در چنین منابعی خیلی بحث شده یکی از معروفترین روابط بازگشتی فاکتوریل است در واقع برای حل یک عبارت فاکتوریل n! = n * (n-1) * (n-2) * (n-3) ... * 1 این 5! = 5 * 4 * 3 * 2 * 1 = 120 بوده است ( برای مطالعات بیشتر درباره تابع بازگشتی به کتاب های ساختمان داده ها مراجعه کنید )

 

- Global و Local در تابع :

متغیری که در تمام توابع استفاده می شود و در بیرون از تابع Main قرار گرفته متغیر Global و به متغیری که تنها داخل یک تابع قرار دارد متغیر Local می گویند در مثال زیر y یک متغیر Global است و می تواند در تمامی توابع استفاده شود و تغییرات روی آن هم اعمال می شود در این مثال X یک متغیر Local است و فقط در یک تابع استفاده می شود و قابلیت استفاده در دیگر توابع را ندارد X در Main و در f با هم متفاوت بوده و هیچ ربطی به هم ندارند ،،، برای استفاده از تابع Global ( سراسری ) اگر متغیر های همنام در تابع داشته باشیم از علامت :: استفاده می کنیم مثلا اگر چند X داشته باشیم تابع سراسری را به صورت x:: می توان معرفی کرد

#include
#include
#include
using namespace std;

void f();
int y=6; // global

main()
{
int x=3; //local
cout<<"x in main="< f();
y++;
cout<<"y in main="< x+=5;
cout<<"x in main="<
getch();
}

void f()
{
int x=5; //local
cout<<"x in f="< cout<<"y in f="<}

نکته : کلاس Global می تواند حافظه را نگهداری کند برای مثال :

 

f();
g();
f();
getch();
}
int x=1; // global

void f(){
cout<<" x in f: " < x+=5;
}
void g(){
cout<<" x in g: " < x-=2;
}

x برابر با 1 چاپ سپس 6 و سپس 4 چاپ می شود در هر بار Global به نگهداری متغیر در حافظه می پردازد تا هر سه تابع بررسی شوند ( تابع f و g و f )

نکته : کلاس register در تابع که پشت متغیر ها نوشته می شود چون از ثبات های دستگاه رایانه استفاده می کند سبب بالا رفتن سرعت اجرای برنامه می شود مثال register x = 1

- کلاس های Static و Auto در توابع :

کلاس Static باعث می شود تا متغیر ها در داخل تابع تغییری نکنند در مثال زیر int x=1 در تابع f در صورتی که واژه static را در پشت آن وارد کنیم در تمامی فراخوانی تابع تنها یکبار x=1 چاپ خواهد شد اگر static نوشته نشود متغیر به صورت پیش فرض دارای کلاس Auto است ، مثال زیر با static x = 1 فقط یک بار 1 را چاپ می کند و در فراخوانی دوباره تابع f در main بار دیگر ثابت خواهد ماند و مجدد 2 را چاپ می کند چاپ این دستور 1 و 2 خواهد بود

#include
#include
using namespace std;


void f();

main()
{
f();
f();
f();

getch();
}

void f()
{
int x=1;
cout< x++;
}

 

- آرگومان های پیش فرض در تابع :

اگر در الگوی تابع که قبل تابع main تعریف می شود آرگومان ها عدد پیش فرض بگیرند int f(int a=1,int b=2,int c=3) در صورتی که انها را به هر تعدادی فراخوانی کنیم مثلاً اگر در زیر تابع main مقادیر متغیری int x=4,y=5,z=6 بخواهیم سه مقدار a+b+c جمع شود اگر فراخوانی به صورت f(a,b) باشد تابع سراغ آرگومان های پیش فرض می رود و حاصل 3 را چاپ می کند و بررسی با متغیر های main صورت نمی گیرد

- inline : اگر در ابتدای یک تابعی واژه inline نوشته شود در تابع هایی که کوچک هستند سرعت اجرا رو بیشتر می کند چون فراخوانی تابع در بخش های دیگر در داخل پوشته نوشته نمیشود و مستقیم به حافظه می رود

- ماکرو : ماکرو به صورت define# تعریف می شود و می توان آن را در بخش های مختلف برنامه استفاده کرد برای مثال define min(x,y) (x a=2;
b=5;
cout<

تعرف کرد

- Overloading در تابع :

این مبحث اشاره به توابعی دارد که که همنام هستند مانند مثال زیر :

در این مثال تابع square تکرار شده است و مقادیر مختلفی را فراخوانی می کند

// function overloading

#include
#include
using namespace std;

int square(int );
double square(double );

main()
{
int a=3;
double b=2.5;
cout< cout<

getch();
}

int square(int a)
{
return a*a;
}

double square(double d)
{
return d*d;
}

- Template در تابع :

در این تابع می توانیم با تعریف یک کلاس از تکرار متغیر ها و تعیین نوع متغیر که از چه نوعی باشد صرف نظر کرده و با مشخص کردن یک الگوی در تابع آن را فراخوانی کرد ، برای مثال< template < class T حرف T به دلخواه معرف کلاس template بوده و متغیر های تابع تعریف شده را توصیف می کند و صرف نظر از int یا double و ... بودن می توانیم تابع را فراخوانی کنیم

 


#include
#include
using namespace std;


template < class T >
T maximum( T x, T y )
{
T max ;
if ( x > y )
max = x;
else
max = y;
return max;
}

int main()
{
int a,b;
cout << "Input two integer values: ";
cin >> a >> b ;
cout << " maximum = "<< maximum( a,b);

double d1, d2;
cout << "\n\n Input two double values: ";
cin >> d1 >> d2 ;
cout << " maximum = " << maximum( d1, d2);

char ch1, ch2;
cout << "\n\n Input two characters: ";
cin >> ch1 >> ch2 ;
cout << " maximum = " << maximum( ch1, ch2) << endl;


getch() ;
}

 

- در هنگام فراخوانی تابع به موارد زیر دقت کنید :

دستوری که تابع را صدا می زند ، فراخوانی تابع نام دارد ، فراخوانی تابع به صورت زیر انجام می شود :

یعنی همانطور که در مباحث بالا گفته شد به صورت ;( لیست آرگومان ها ) نام تابع

- الگوی تابع که به آن Protype هم گفته می شود قبل از تابع اصلی () main قرار گیرد

- نوع تابع را ذکر کنید اگر نوع تابعی ذکر نشود ، همان int در نظر گرفته می شود

- الگوی تابع باید با تعریف تابع یکی باشد در غیر این صورت کامپایلر سی پلاس پلاس خطا می دهد

- تعداد و نوع پارامتر ها ( در هنگام تعریف تابع ) و آرگومان ها ( در هنگام فراخوانی ) یکسان باشد ( ممکن است از نظر نامی یکی هم نباشند ایرادی نداره )

- در هنگام تعریف الگوی اعلانی تابع می توانیم نام پارامتر ها را قید نکنیم اما نوع مقادیر باید قید شود یعنی می توانیم به صورت int my_def(int , int ) بنویسیم

- در سی پلاس پلاس نمی توان تابعی را داخل تابع دیگر تعریف کرد

- سعی کنید توابع را بعد از تابع Main تعریف کنید اگر قبل تابع main هم تعریف شود لازم نیست الگوی تابع protype نوشته شود

  • ۰۰/۰۲/۱۷
  • amir khan