توابع در زبان C++
یک تابع گروهی از دستورات است که با هم یک کار را انجام می دهند. هر برنامه ای که با زبان برنامه نویسی C++ نوشته می شود، حتما باید یک تابع اصلی به نام تابع main() را داشته باشد. شما می توانید کدهای خود را به توابع مختلف تقسیم کنید و نحوه تقسیم کدها نیز بستگی به خود شما دارد. اما منطق تقسیم کد این است که هر تابع یک کار خاص را انجام دهد.
اعلان یک تابع، اطلاعات لازم در مورد تابع (مانند اسم تابع، مقدار بازگشتی و پارامترهای تابع) را به کامپایلر می دهد. کتابخانه استاندارد C++ توابع پیش ساخته متعددی را فراهم می کند که می توانید در برنامه های خود از آن ها استفاده کنید. برای نمونه تابع strcat() برای چسباندن دو رشته به یک دیگر استفاده می شود.
تعریف یک تابع
شکل کلی تعریف یک تابع در زبان C++ به صورت زیر است:
1 2 3 | return_type function_name( parameter list ) { body of the function } |
تعریف یک تابع شامل یک بخش هدر و یک بخش بدنه می شود. قسمت های مختلف یک تابع در زیر توضیح داده شده است:
- return_type : نوع داده ای است که تابع قرار است بعد از اتمام کارش باز گرداند. اگر تابع هیچ مقداری را بر نمی گرداند، می توانید آن را به صورت void تعریف کنید.
- funcation_name : اسم تابع را مشخص می کند. اسم تابع به همراه لیست پارامترها امضای یک تابع را تشکیل می دهند.
- parameter list : پارامترهای یک تابع را مشخص می کند. یک پارامتر مانند یک placeholder عمل می کند و زمانی که شما تابع را فراخوانی می کنید، باید مقدار پارامترهای تعریف شده را نیز به آن بدهید. همچنین یک تابع می تواند بدون پارامتر تعریف شود.
- body of the function : بدنه تابع را مشخص می کند. بدنه تابع شامل مجموعه ای از دستورات است که عملی که تابع انجام می دهد را تعریف می کنند.
مثال
در زیر سورس کد مربوط به یک تابع که max() نام دارد را مشاهده می کنید. این تابع دو پارامتر با نام های num1 و num2 می گیرد و هر کدام که از دیگری بزرگتر باشد را به عنوان مقدار بازگشتی باز می گرداند.:
1 2 3 4 5 6 7 8 9 10 | // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; } |
اعلان یک تابع
اعلان یک تابع، اطلاعات لازم در مورد تابع (مانند اسم تابع، مقدار بازگشتی و پارامترهای تابع) و نحوه فراخوانی آن را به کامپایلر می دهد. بدنه اصلی تابع می تواند به صورت جداگانه تعریف شود.
اعلان یک تابع به صورت زیر انجام می شود:
1 | return_type function_name( parameter list ); |
برای مثال، اعلان تابع max() که در مثال بالا به آن پرداخیتم، به صورت زیر است:
1 | int max(int num1, int num2); |
1 | int max(int, int); |
اعلان تابع زمانی که شما تعریف تابع را در یک فایل دیگر نوشته اید، لازم است.
فراخوانی یک تابع
زمانی که یک تابع را فراخوانی می کنید، کنترل اجرای برنامه به آن تابع منتقل می شود و دستورات موجود در تابع را اجرا می کند و پس از پایان اجرای دستورات، کنترل اجرای برنامه به محل قبلی خود باز میگردد.
شما به راحتی می توانید با نوشتن اسم تابع و دادن پارامترهای لازم آن را فراخوانی کنید. مثال زیر نحوه فراخوانی یک تابع در زبان C++ را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> using namespace std; // function declaration int max(int num1, int num2); int main () { // local variable declaration: int a = 100; int b = 200; int ret; // calling a function to get max value. ret = max(a, b); cout << "Max value is : " << ret << endl; return 0; } // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; } |
زمانی که کد بالا توسط کامپایلر زبان C++ اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 | Max value is : 200 |
آرگومان های تابع
اگر یک تابع از آرگومان استفاده می کند، باید متغیرهایی را برای گرفتن این مقادیر اعلان کند. این متغیرها پارامتر نامیده می شوند. پارامترها مانند متغیرهای محلی عمل می کنند و هنگام ورود به تابع ایجاد و بعد از خروج از تابع از بین می روند.
در هنگام فراخوانی یک تابع، دو راه برای ارسال آرگومان ها به آن وجود دارد که در زیر مشاهده می کنید:
ردیف | توضیحات |
1 | فراخوانی با مقدار (By Value) در این نوع فراخوانی فقط یک کپی از مقدار اصلی به تابع ارسال می شود و تغییرات اعمال شده در تابع تاثیری بر مقدار اصلی ندارد. |
فراخوانی با اشاره گر (By Pointer) در این نوع فراخوانی یک کپی از آدرس آرگومان به تابع ارسال می شود به این معنی که تابع دسترسی مستقیم به مقدار آن آرگومان دارد و هر تغییری که درون تابع اعمال شود بر روی مقدار اصلی نیز تاثیر می گذارد. | |
2 | فراخوانی با ارجاع (By Reference) در این نوع فراخوانی یک کپی از مرجع آرگومان به تابع ارسال می شود به این معنی که تابع دسترسی مستقیم به مقدار آن آرگومان دارد و هر تغییری که درون تابع اعمال شود بر روی مقدار اصلی نیز تاثیر می گذارد. |
مقادیر پیشفرض برای پارامترها
زمانی که یک تابع را تعریف می کنید، می توانید برای پارامترهای آن یک مقدار پیشفرض تعیین کنید تا در صورتی که موقع فراخوانی تابع مقداری برای پارامترها ارسال نشود، تابع از این مقادیر پیش فرض استفاده کند. به منظور تعیین مقدار پیشفرض برای پارامترهای تابع می توانید مانند مثال زیر عمل کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; int sum(int a, int b = 20) { int result; result = a + b; return (result); } int main () { // local variable declaration: int a = 100; int b = 200; int result; // calling a function to add the values. result = sum(a, b); cout << "Total value is :" << result << endl; // calling a function again as follows. result = sum(a); cout << "Total value is :" << result << endl; return 0; } |
زمانی که کد بالا کامپایل و اجرا شود نتیجه زیر را تولید خواهد کرد:
1 2 | Total value is :300 Total value is :120 |
هیچ نظری ثبت نشده است