رفتن به مطلب
محفل من
Mostafa

آموزش توابع در C++

پست های پیشنهاد شده

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

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

خط اعلان تابع/function declaration در واقع اسم تابع، نوع بازگشتی (خروجی) و پارامترهای آن را به کامپایلر اعلان می کند. تعریف تابع/ function definition بدنه ی حقیقی تابع و آن عملیاتی که انجام می دهد را تعیین می کند.

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

زبان های برنامه نویسی مختلف به توابع با واژه های مختلف اشاره می کنند. برای مثال ممکن است آن را یک متد، subroutine یا procedure نام گذاری کنند.

 

نحوه ی تعریف تابع

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

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

تعریف تابع در ++C از یک (خط حاوی اسم تابع و ورودی های آن) function header و (بدنه یا پیاده سازی تابع) function body تشکیل می شود. در زیر بخش های مختلف یک تابع به تفصیل شرح داده شده است:

 

  • Return Type (نوع خروجی یا مقدار بازگشتی): یک تابع می تواند خروجی داشته باشد. این بخش از تابع نشانگر نوع مقداری است که تابع در خروجی برمی گرداند. برخی از توابع عملیاتی را انجام می دهند ولی در خروجی مقداری را برنمی گرداند که در این صورت بایستی در جایگاه return type کلیدواژه ی void را درج نمایید. بدین معنی که تابع مزبور خروجی ندارد.
  • Function Name (اسم تابع): این بخش اسم حقیقی تابع مورد نظر است که عملیاتی را انجام می دهد. اسم تابع و لیست پارامترهای ورودی آن با هم امضا یا signature یک متد را تشکیل می دهند.
  • Parameter list (لیست پارامترها): پارامتر نقش یک مکان نگهدار (placeholder) را ایفا می کند. زمانی که تابعی فراخوانی می شود، شما در واقع مقداری را به تابع ارسال می کنید. از این مقدار تحت عنوان پارامتر یا آرگومان یاد می شود. لیست پارامترها به نوع، ترتیب و تعداد پارامترهای یک تابع اشاره دارد. لازم به ذکر است که پارامتر کاملا اختیاری است، بدین معنی که یک تابع می تواند هیچ پارامتری نداشته باشد.
  • (بدنه حاوی پیاده سازی و دستورات تابع) Function Body: بدنه ی تابع دربردانده ی مجموعه ای از دستورات است که تعیین می کند تابع چه عملیاتی را انجام می دهد.

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

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

اعلان تابع (function declaration)

اعلان تابع یا function declaration در حقیقت اسم تابع و اینکه چگونه می توان آن را فراخوانی کرد را به کامپایلر اعلان می کند.

بدنه ی تابع را می توان به صورت جداگانه تعریف کرد.

function declaration از بخش های زیر تشکیل می شود :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

اگر تابع max() را به خاطر داشته باشید، ساختار دستوری زیر بخش function declaration (نوع بازگشتی، اسم تابع و پارامترهای ورودی آن) را مشخص می کند :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

اسم پارامتر از اهمیت چندانی برخوردار نیست و صرف ذکر نوع پارامتر ورودی کفایت می کند. بنابراین ساختار دستوری زیر نیز مجاز است :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

با function declaration شما می توانید تابع مورد نیاز خود را در یک فایل از برنامه تعریف کنید و سپس آن را در فایل دیگری از برنامه به راحتی فراخوانی نمایید. در چنین مواردی، توصیه می شود تابع را در بالای فایلی که قرار است آن را فراخوانی کند، اعلان (declare) نمایید.

 

فراخوانی تابع (function call)

به هنگام ایجاد یک تابع در ++C، توسعه دهنده می بایست یک تعریف از عملیاتی که تابع انجام می دهد را ارائه می نماید. به منظور استفاده از تابع و انجام عملیات مد نظر، شما می بایست آن تابع را فراخوانی کنید.

 

زمانی که یک برنامه تابعی را فراخوانی می کند، کنترل و اجرای برنامه به تابع فراخوانی شده انتقال می یابد. تابع عملیاتی که در بدنه ی آن تعریف شده را انجام داده و زمانی که دستور return اجرا می شود یا اجرا به کاراکتر { می رسد، اجرای به برنامه ی اصلی باز می گردد.

 

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

مثال :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

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

 

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

 

آرگومان های تابع (function arguments)

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

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

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

 
 
در روش حاضر کپی از مقدار حقیقی یک آرگومان در پارامتر رسمی یک تابع جایگذاری شده و به پارامتر فرستاده می شود. در این روش، تغییراتی که بر روی پارامتر موجود در بدنه ی تابع اعمال می شود، در واقع هیچ تاثیری بر روی مقدار اصلی و اولیه ی آرگومان نخواهد داشت. زمانی بکار می آید که بخواهید تابع یا هیچ خروجی نداشته باشد و یا حداکثر ۱ مقدار را برگرداند.
Call by value
(فراخوانی کپی از مقدار متغیر)
در این روش فراخوانی، کپی آدرس یا نشانی آرگومان در حافظه در جایگاه پارامتر رسمی جایگذاری می شود (به پارامتر انتقال می یابد). داخل بدنه ی تابع، این آدرس جهت دسترسی به مقدار حقیقی آرگومانی که در تابع بکار رفته، مورد استفاده قرار می گیرد. با توجه به آنچه گفته شد، تغییراتی که بر روی پارامتر اعمال می شود، متعاقبا بر روی آرگومان نیز منعکس می گردد و نتیجتا مقدار اصلی آرگومان در حافظه را تغییر می دهد.
Call by pointer
(فراخوانی با اشاره گر)
در این روش فراخوانی، آدرس آرگومان در پارامتر رسمی تابع جایگذاری شده یا به عبارت دیگر آدرس آرگومان ها به پارامتر ارسال می شود. داخل بدنه ی تابع، اشاره گر به منظور دسترسی به مقدار حقیقی آرگومان مورد استفاده قرار می گیرد. در روش حاضر هر تغییری که بر روی پارامتر اعمال می شود نهایتا بر روی اصل آرگومان نیز منعکس می گردد و مقدار نهایی آن را تغییر می دهد. این روش بیشتر زمانی کاربرد دارد که بخواهید بیش از یک مقدار خروجی تابع باشد.
Call by reference
(فراخوانی متغیر با آدرس یا ارجاعی به محل ذخیره ی متغیر در حافظه)

به صورت پیش فرض، ++C از روش Call by value برای ارسال آرگومان ها (مقادیر) به پارامتر استفاده می کند. همان طور که در جدول بالا ذکر شد، در این روش کد موجود در بدنه ی تابع قادر نخواهد بود مقدار اصلی آرگومان ها را تغییر دهد.

 

در مثال فراخوانی تابع ()max نیز از همین روش ارسال آرگومان استفاده شد.

 

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

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

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

خروجی کد فوق به شرح زیر می باشد :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
    • 1 Posts
    • 4 Views
    • 3 Posts
    • 43 Views
    • 1 Posts
    • 38 Views
    • 1 Posts
    • 46 Views
    • 1 Posts
    • 136 Views
    • 1 Posts
    • 116 Views
    • 1 Posts
    • 141 Views

  • سفارش پروژه برنامه نویسی

×
×
  • اضافه کردن...