در این مقاله هر آن چه باید در مورد تابع های ++C بدانید را آموزش میدهیم. از جمله این که چه نوع تابعهایی در زبان برنامهنویسی ++C وجود دارند و مثالهایی از شیوه استفاده از آنها ارائه میکنیم. در برنامهنویسی منظور از تابع گزارهای است که کدها را برای اجرای وظیفه خاصی گروهبندی میکند. برای مطالعه بخش قبلی این مجموعه مقالات آموزشی میتوانید به لینک زیر رجوع کنید:
بسته به این که تابع از قبل تعریف شده باشد یا از سوی برنامهنویس ایجاد شود دو نوع تابع وجود دارد:
- تابع کتابخانه
- تابع تعریف شده از سوی کاربر
تابع کتابخانه
تابعهای کتابخانه تابعهای داخلی زبان برنامهنویسی ++C هستند. برنامهنویس میتواند با فراخوانی مستقیم تابع از این تابعهای کتابخانه استفاده کند و نیازی نیست که آنها را خودش بنویسد.
مثال 1
#include <iostream> #include <cmath> using namespacestd; intmain() { doublenumber,squareRoot; cout<<"Enter a number: "; cin>>number; // sqrt() is a library function to calculate square root squareRoot=sqrt(number); cout<<"Square root of "<<number<<" = "<<squareRoot; return0; } |
خروجی
Enteranumber:26 Square root of26=5.09902 |
در مثال فوق، تابع کتابخانه ()sqrt برای محاسبه ریشه مربع یک عدد استفاده میشود. به کد <include <cmath# در برنامه فوق توجه کنید. در این کد cmath یک فایل «هدر» (Header) است. تعریف تابع ()sqrt یعنی بدنه تابع در فایل هدر cmath قرار دارد. زمانی که فایل cmath را با استفاده از دستور <include <cmath# در برنامه خود بگنجانید، میتوانید از همه تابعهای تعریف شده در آن استفاده کنید.
تابع تعریف شده از سوی کاربر
++C به برنامهنویس امکان میدهد که تابع خاص خود را تعریف کند. تابع تعریف شده از سوی کاربر به گروهبندی کد میپردازد تا وظیفه خاصی را اجرا کند و این گروه کد یک نام (شناسه) دارد. زمانی که تابع از هر بخش از برنامه فراخوانی شود، کدهای تعریف شده در بدنه تابع را اجرا میکند.
طرز کار تابعهای تعریف شده از سوی کاربر
به تصویر فوق توجه کنید. زمانی که یک برنامه شروع به اجرا میکند، سیستم تابع ()main را فراخوانی میکند، یعنی سیستم شروع به اجرای کد از تابع ()main میکند. زمانی که کنترل برنامه به ()function_name درون ()main برسد، به ()void function_name انتقال مییابد و همه کدهای درون آن را اجرا میکند. سپس کنترل برنامه مجدداً به تابع main بازمیگردد و چنان که در تصویر فوق مشخص است، کد پس از فراخوانی ()function_name اجرا میشود.
مثال 2
برنامه ++C زیر، دو عدد صحیح را با هم جمع میکند. یک تابع به نام ()add ایجاد میکنیم تا اعداد صحیح را با هم جمع کند و مجموع را در تابع ()main نمایش دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> using namespacestd; // Function prototype (declaration) intadd(int,int); intmain() { intnum1,num2,sum; cout<<"Enters two numbers to add: "; cin>>num1>>num2; // Function call sum=add(num1,num2); cout<<"Sum = "<<sum; return0; } // Function definition intadd(inta,intb) { intadd; add=a+b; // Return statement returnadd; } |
خروجی
Enters two integers:8 -4 Sum=4 |
اعلان پروتوتایپ تابع
اگر یک تابع تعریف شده از سوی کاربر پس از تابع ()main تعریف شود، کامپایلر خطایی نمایش خواهد داد. دلیل این امر آن است که کامپایلر از وجود تابع تعریف شده از سوی کاربر، نوع آرگومانهای ارسالی به تابع و نوع بازگشتی آن ناآگاه است.
پروتوتایپ تابع در ++C یک اعلان از تابع بدون بدنه است که اطلاعاتی را در مورد تابع تعریف شده از سوی کاربر در اختیار کامپایلر قرار میدهد. پروتوتایپ تابع در مثال فوق به صورت زیر است:
چنان که ملاحظه میکنید، در پروتوتایپ تابع هیچ بدنهای ندارد. ضمناً تنها نوع بازگشتی آرگومانها ذکر شده و خبری از خود آرگومانها نیست. پروتوتایپ تابع را میتوان به شکل زیر نیز اعلان کرد، اما لزومی به نوشتن آرگومانها وجود ندارد:
نکته: در صورتی که تابع تعریف شده کاربر پیش از تابع ()main قرار داشته باشد، اعلان پروتوتایپ ضروری است.
فراخوانی تابع
برای اجرای کد بدنه تابع، تابع تعریف شده از سوی کاربر باید احضار یا فراخوانی شود. در برنامه فوق دستور زیر:
درون ()main تابع تعریف شده کاربر را فراخوانی میکند. بدین ترتیب تابع یک عدد صحیح بازگشت میدهد که در متغیر add ذخیره میشود.
تعریف تابع
خود تابع به صورت تعریف تابع مورد ارجاع قرار میگیرد. تعریف تابع در برنامه فوق به صورت زیر است:
// Function definition intadd(inta,intb) { intadd; add=a+b; returnadd; } |
زمانی که تابعی فراخوانی میشود، کنترل به گزاره اول بدنه تابع انتقال مییابد. سپس گزارههای دیگر در بدنه تابع به ترتیب اجرا میشوند. هنگامی که همه کدهای درون تعریف تابع اجرا شدند، کنترل برنامه به برنامه فراخوانی کننده بازگشت مییابد.
ارسال آرگومان به تابع
پارامتر آرگومان در برنامهنویسی، اشاره به دادههایی دارد که در زمان فراخوانی تابع به آن ارسال میشوند. در مثال فوق، دو متغیر num1 و num2 در طی فراخوانی تابع به آن ارسال میشوند. این آرگومانها به نام آرگومانهای واقعی شناخته میشوند. مقدار num1 و num2 به ترتیب با متغیرهای a و b مقداردهی میشوند. این آرگومانهای a و b به نام آرگومانهای صوری شناخته میشوند.
این وضعیت در شکل زیر نمایش یافته است:
نکاتی در مورد ارسال آرگومانها
- تعداد آرگومانهای واقعی و آرگومانهای صوری باید یکسان باشند. تنها استثنا در زمان Overload کردن تابع است.
- نوع آرگومان واقعی اول باید با نوع آرگومان صوری اول مطابقت داشته باشد. به طور مشابه، نوع آرگومان واقعی دوم باید با نوع آرگومان صوری دوم مطابقت پیدا کند و همین طور تا آخر.
- میتوان تابعی را بدون ارسال آرگومان نیز فراخوانی کرد. تعداد آرگومانهای ارسالی به یک تابع به شیوهای که برنامهنویس برای حل مسئله مربوطه انتخاب کرده است وابستگی دارد.
- در برنامه فوق، هر دو آرگومان از نوع int هستند، اما لزومی نیست که هر دو آرگومان از نوع واحدی باشند.
گزاره بازگشت
هر تابعی میتواند با استفاده از گزاره Return یک مقدار منفرد به برنامه فراخوانی کننده بازگشت دهد. در برنامه فوق، مقدار add از تابع تعریف شده از سوی کاربر با استفاده از گزاره زیر به برنامه فراخوانی کننده بازگشت مییابد:
تصویر زیر طرز کار گزاره return را نشان میدهد:
در برنامه فوق، مقدار add درون تابع تعریف شده کاربر به تابع فراخوانی کننده بازگشت مییابد. سپس این مقدار در متغیر sum ذخیره میشود. توجه داشته باشید که متغیر بازگشت یافته یعنی add از نوع int و متغیر sum نیز از نوع int است. ضمناً توجه کنید که نوع بازگشتی یک تابع در اعلان تابع تعریف میشود:
عبارت int در دستور اعلان فوق به این معنی است که این تابع باید مقداری با نوع int بازگشت دهد. اگر هیچ مقداری به تابع فراخوانی کننده بازگشت نیابد، در این صورت باید از void استفاده کنید. بدین ترتیب به پایان این بخش از سری مقالات آموزش ++C میرسیم.
برای مطالعه قسمت بعدی این مجموعه مطلب آموزشی میتوانید روی لینک زیر کلیک کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامه نویسی C++
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- اشتراک گذاری کد بین اندروید و iOS با ++C — از صفر تا صد
- آموزش ++C — راهنمای شروع یادگیری
==
«میثم لطفی» دانشآموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقهمندیهایش در رشتههای برنامهنویسی، کپیرایتینگ و محتوای چندرسانهای، در زمینه نگارش مقالاتی با محوریت نرمافزار نیز با مجله فرادرس همکاری دارد.
بر اساس رای 12 نفر
آیا این مطلب برای شما مفید بود؟