آموزش انواع توابع تعریف شده توسط کاربر در ++C
در این آموزش، شما روش های مختلف تعریف توابع در C++ را یاد خواهید گرفت.
برای درک بهتر آرگومان های ارسالی و بازگشتی، توابع تعریف شده توسط کاربر می توانند به شکل زیر باشند:
- تابع بدون آرگومان ارسالی و بدون مقدار بازگشتی
- تابع بدون آرگومان ارسالی اما با مقدار بازگشتی
- تابع با آرگومان ارسالی اما بدون مقدار بازگشتی
- تابع با آرگومان ارسالی و مقدار بازگشتی
در زیر ۴ نوع تابع تعریف شده اند.
مثال ۱: تابع بدون آرگومان ارسالی و بدون مقدار بازگشتی
- # include <iostream>
- using namespace std;
- void prime();
- int main()
- {
- // No argument is passed to prime()
- prime();
- return 0;
- }
- // Return type of function is void because value is not returned.
- void prime()
- {
- int num, i, flag = 0;
- cout << “Enter a positive integer enter to check: “;
- cin >> num;
- for(i = 2; i <= num/2; ++i)
- {
- if(num % i == 0)
- {
- flag = 1;
- break;
- }
- }
- if (flag == 1)
- {
- cout << num << ” is not a prime number.”;
- }
- else
- {
- cout << num << ” is a prime number.”;
- }
- }
در قطعه کد بالا تابع ()prime بدون هیچ آرگومانی در ()main صدا زده می شود.
()prime از کاربر می خواهد یک عدد مثبت وارد کند سپس بررسی می کند که آیا اول است یا نه.
نوع بازگشتی تابع void است، یعنی تابع مقدار بازگشتی ندارد.
مثال ۲ : تابع بدون آرگومان ارسالی اما با مقدار بازگشتی
- #include <iostream>
- using namespace std;
- int prime();
- int main()
- {
- int num, i, flag = 0;
- // No argument is passed to prime()
- num = prime();
- for (i = 2; i <= num/2; ++i)
- {
- if (num%i == 0)
- {
- flag = 1;
- break;
- }
- }
- if (flag == 1)
- {
- cout<<num<<” is not a prime number.”;
- }
- else
- {
- cout<<num<<” is a prime number.”;
- }
- return 0;
- }
- // Return type of function is int
- int prime()
- {
- int n;
- printf(“Enter a positive integer to check: “);
- cin >> n;
- return n;
- }
در برنامه بالا، تابع ()prime در ()main بدون آرگومان ارسالی صدا زده می شود.
()Prime یک عدد صحیح مثبت از کاربر می گیرد. از آنجا که نوع بازگشتی تابع integer است، عدد ورودی را به تابع ()main برمی گرداند.
سپس، در تابع ()main بررسی می شود آیا عدد اول است یا خیر و نتیجه نمایش داده می شود.
مثال ۳ : تابع با آرگومان ارسالی اما بدون مقدار بازگشتی
- #include <iostream>
- using namespace std;
- void prime(int n);
- int main()
- {
- int num;
- cout << “Enter a positive integer to check: “;
- cin >> num;
- // Argument num is passed to the function prime()
- prime(num);
- return 0;
- }
- // There is no return value to calling function. Hence, return type of function is void. */
- void prime(int n)
- {
- int i, flag = 0;
- for (i = 2; i <= n/2; ++i)
- {
- if (n%i == 0)
- {
- flag = 1;
- break;
- }
- }
- if (flag == 1)
- {
- cout << n << ” is not a prime number.”;
- }
- else {
- cout << n << ” is a prime number.”;
- }
- }
در برنامه بالا، از کاربر خواسته شده عدد مثبتی وارد کند که در متغیر num ذخیره می شود.
سپس num به تابع ()prime ارسال می شود و در آن جا مشخص می شود که اول است یا نه. سپس نتیجه را نمایش می دهد.
از آنجا که نوع return در ()prime برابر با void است، تابع هیچ مقداری بازگشت نمی دهد.
مثال ۴ : تابع با آرگومان ارسالی و مقدار بازگشتی
- #include <iostream>
- using namespace std;
- int prime(int n);
- int main()
- {
- int num, flag = 0;
- cout << “Enter positive integer to check: “;
- cin >> num;
- // Argument num is passed to check() function
- flag = prime(num);
- if(flag == 1)
- cout << num << ” is not a prime number.”;
- else
- cout<< num << ” is a prime number.”;
- return 0;
- }
- /* This function returns integer value. */
- int prime(int n)
- {
- int i;
- for(i = 2; i <= n/2; ++i)
- {
- if(n % i == 0)
- return 1;
- }
- return 0;
- }
در برنامه فوق از کاربر خواسته می شود یک عدد صحیح مثبت وارد کند که در متغیر num ذخیره می شود.
سپس، num به تابع ()prime ارسال می شود که در آن بررسی می شود آیا عدد اول است یا خیر.
از آنجا که نوع return در ()prime صحیح است، ۱ یا ۰ به ()main بازگردانده می شود. اگر num یک عدد اول باشد، ۱ باز می گردد. اگر نه، ۰ باز می گردد.
در تابع ()main مقدار بازگشتی ۱ یا ۰ در متغیر flag ذخیره می شود، و متن مربوطه بر روی صفحه چاپ می شود.
کدام روش بهتر است؟
هر چهار برنامه بالا یک خروجی مشابه ارائه می دهند و همه از لحاظ فنی درست هستند.
هیچ قاعده ای وجود ندارد که بگوید کدام روش بهتر است انتخاب شود.
روش خاص انتخاب شده بسته به وضعیت و چگونگی رفع مشکل است.