توابع در ++C

یک تابع به مجموعه‌ای از دستورات گفته می‌شود که در کنار هم یک وظیفه خاص را انجام می‌دهند. هر برنامه ++C دارای حداقل یک تابع، یعنی تابع ()main می‌باشد. همه برنامه‌ها می‌توانند توابعی اضافه بر تابع main تعریف کنند.

می‌توانید کد خود را به چندین تابع تقسیم کنید. اینکه چگونه کد خود را درون چند تابع تقسیم کنید برعهده خود شماست، اما منطقی این است که این کار را به گونه‌ای انجام دهید که هرتابع یک وظیفه مشخص را برعهده داشته باشد.

اعلان یک تابع، نام تابع، نوع داده بازگشتی و پارامترهای آن را به کامپایلر معرفی می‌کند. تعریف یک تابع بدنه اصلی تابع را فراهم می‌کند.

کتابخانه استاندارد ++C توابع درونی فراوانی برای فراخوانی در برنامه مهیا ساخته است. برای مثال، تابع ()strcat برای چسباندن دو رشته به همدیگر، تابع ()memcpy برای کپی کردن یک مکان از حافظه به مکان دیگر از حافظه و بسیاری توابع دیگر.

یک تابع با نام‌های دیگری مانند متد (method) یا ساب روتین (sub-routine) یا رویه (procedure) نیز شناخته می‌شود.

تعریف یک تابع

شکل عمومی ‌تعریف یک تابع در ++C به صورت زیر است.

return_type function_name( parameter list ) {
   body of the function
}

تعریف تابع در ++C شامل یک هدر و یک بدنه می‌باشد. بخش‌های یک تابع در زیر توضیح داده شده است.

  • نوع داده بازگشتی: یک تابع می‌تواند یک مقدار را برگرداند. return_type  نوع داده ای است که تابع برمی‌گرداند. برخی توابع عملیات خود را بدون برگرداندن یک مقدار انجام می‌دهند. در این حالت، کلیدواژه void برای return_type استفاده می‌شود.
  • نام تابع: نام اصلی تابع می‌باشد.نام تابع به همراه لیست پارامترهای آن، تشکیل دهنده امضای تابع (function signature) هستند.
  • پارامترها: پارامتر همانند یک ظرف است. هنگام احضار تابع، یک مقدار به پارامتر ارسال می‌شود. این مقدار پارامتر یا آرگومان اصلی است. لیست پارامترها به نوع، ترتیب، و تعداد پارامترهای یک تابع اشاره می‌کند. پارامترها اختیاری می‌باشند؛ یعنی یک تابع ممکن است هیچ پارامتری نداشته باشد.
  • بدنه تابع: بدنه تابع شامل مجموعه دستوراتی است که وظیفه تابع را تعریف می‌کنند.
مطلب پیشنهادی:  وراثت در ++C

مثال: سورس کد تابعی به نام ()max در زیر آورده شده است. این تابع دو پارامتر num1 و num2 را دریافت کرده و بزرگترین آنها را برمی‌گرداند.

// 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; 
}

اعلان تابع (Function Declaration)

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

اعلان یک تابع دارای بخش‌های زیر است:

return_type function_name( parameter list );

برای تابع ()max که در بالا تعریف شد، اعلان تابع به صورت زیر خواهد بود:

int max(int num1, int num2);

نام پارامترها در اعلان تابع خیلی اهمیت ندارد و تنها نوع آنها مهم است. بنابراین، اعلان زیر نیز می‌تواند صحیح باشد.

int max(int, int);

اعلان یک تابع زمانی اهمیت می‌یابد که می‌خواهید تابعی را در یک فایل سورس تعریف کرده و آن را در فایل دیگری فراخوانی کنید. در این حالت، باید تابع را در بالای فایل فراخواننده اعلان کنید.

فراخوانی یک تابع

هنگام ساختن یک تابع در ++C، باید مشخص کنید که تابع قرار است چه کاری انجام دهد. برای استفاده از تابع، باید آن تابع را فراخوانی (call) یا احضار (invoke) کنید.

وقتی که یک برنامه تابعی را فراخوانی می‌کند، کنترل برنامه به تابع فراخوانده شده منتقل می‌شود. تابع فراخوانده شده وظیفه مشخص خود را انجام داده و با اجرای دستور برگرداندن مقدار و یا با رسیدن به انتهای تابع، کنترل به برنامه اصلی برگردانده می‌شود.

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

#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; 
}

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

Max value is : 200

آرگومان‌های تابع (Function Argument)

اگر قرار است تابعی از آرگومان‌ها بهره گیرد، باید متغیرهایی را اعلان کند که آن آرگومان‌ها را بپذیرند. این متغیرها پارامترهای رسمی (formal parameter) تابع نامیده می‌شوند.

مطلب پیشنهادی:  اورلود کردن عملگر ایندکس در ++C

پارامترهای رسمی‌ همانند متغیرهای محلی درون تابع عمل می‌کنند و با ورود به تابع ساخته شده و با خروج از آن ازبین می‌روند.

هنگام فراخوانی یک تابع، چند روش برای ارسال آرگومان‌ها وجود دارد:

ردیف

نوع فراخوانی و توضیح آن

1

فراخوانی با مقدار (call by value)

این روش مقدار اصلی یک آرگومان را درون پارامتر رسمی ‌تابع کپی می‌کند. در این حالت، تغییرات اعمال شده روی پارامتر در درون تابع، اثری بر روی آرگومان نمی‌گذارد.

2

فراخوانی با اشاره گر (call by pointer)

این روش آدرس آرگومان را در پارامتر رسمی ‌کپی می‌کند. این آدرس برای دسترسی به آرگومان اصلی در درون تابع به کار می‌رود. بدین معنی که تغییرات اعمالی به پارامترها آرگومان‌ها را نیز تحت تاثیر قرار می‌دهد.

3

فراخوانی با رفرنس (call by reference)

این روش رفرنس به یک آرگومان را درون پارامتر رسمی‌ کپی می‌کند. این رفرنس درون تابع برای دسترسی به آرگومان اصلی به کار می‌رود. بنابراین تغییرات اعمالی در پارامترها آرگومان‌ها را نیز تغییر می‌دهد.

در حالت پیش فرض، ++C آرگومان‌ها را به صورت فراخوانی با مقدار ارسال می‌کند. در حالت کلی، کدهای درون تابع نمی‌توانند آرگومان‌ها را تغییر دهند و در مثال فراخوانی تابع ()max نیز چنین روشی را دیدیم.

مقادیر پیش‌فرض برای پارامترها

هنگام تعریف یک تابع، می‌توان برای پارامترها مقدار پیش فرض تعریف کرد. اگر هنگام فراخوانی تابع به این آرگومان مقداری اختصاص داده نشود، این مقدار پیش فرض استفاده می‌شود.

مطلب پیشنهادی:  محصورسازی داده (Data Encapsulation) در ++C

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

#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;
}

با اجرای کد زیر، خروجی زیر تولید می‌شود:

Total value is :300
Total value is :120

منبع: ترجمه از سایت tutorialspoint.com

در جلسه بعدی آموزش ++C با ما همراه باشید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 دیدگاه

  1. شاهرخ صادقلو

    دمتوون‌گرم… مستفیض شدیم… علی برکته‌الله…