Overload در تابع های ++C — راهنمای کاربردی
تابعهای Overload شده به توابعی گفته میشود که نامی یکسان اما آرگومان(های) متفاوتی دارند. در این مقاله به بررسی نمونههایی از تابعهای Overload شده میپردازیم. برای مطالعه بخش قبلی این مجموعه مقالات آموزشی به لینک زیر مراجعه کنید:
چنان که در بخشهای قبلی صحبت کردیم تابع به معنی قطعه کدی است که به گروهبندی کد میپردازد و وظیفه خاصی را اجرا میکند. در برنامهنویسی ++C دو تابع به شرط این که تعداد و/یا نوع آرگومانهایی که ارسال میشوند متفاوت باشند، میتوانند نام یکسانی داشته باشند.
در تابعهای زیر نوع یا تعداد (و یا هر دوی) پارامترها متفاوت هستند و لذا به نام تابعهای overload شده شناخته میشوند:
1int test() { }
2int test(int a) { }
3float test(double a) { }
4int test(int a, double b) { }
در قطعه کد فوق 4 تابع به صورت تابعهای overload شده هستند، زیرا آرگومان(های) ارسالی به این تابعها متفاوت هستند. توجه داشته باشید که نوع بازگشتی هر 4 تابع یکسان هستند. تابعهای overload شده ممکن است نوع بازگشتی متفاوتی داشته باشند یا نداشته باشند، اما حتماً باید آرگومانهای متفاوتی داشته باشند.
1// Error code
2int test(int a) { }
3double test(int b){ }
تعداد و نوع آرگومانهای ارسالی به این دو تابع حتی با این که نوع بازگشتی متفاوت است، یکسان هستند. از این رو کامپایلر خطایی ایجاد میکند.
مثال 1
overload کردن تابع:
در ادامه، کدهای مربوطه را آوردهایم.
1#include <iostream>
2using namespace std;
3void display(int);
4void display(float);
5void display(int, float);
6int main() {
7 int a = 5;
8 float b = 5.5;
9 display(a);
10 display(b);
11 display(a, b);
12 return 0;
13}
14void display(int var) {
15 cout << "Integer number: " << var << endl;
16}
17void display(float var) {
18 cout << "Float number: " << var << endl;
19}
20void display(int var1, float var2) {
21 cout << "Integer number: " << var1;
22 cout << " and float number:" << var2;
23}
خروجی
Integer number: 5 Float number: 5.5 Integer number: 5 and float number: 5.5
در کد فوق، تابع ()display سه بار با انواع یا تعداد متفاوتی از آرگومانها فراخوانی میشود. نوع بازگشتی همه این تابعها یکسان است، اما الزامی برای این مسئله وجود ندارد.
مثال 2
overload کردن تابع:
1// Program to compute absolute value
2// Works both for integer and float
3#include <iostream>
4using namespace std;
5int absolute(int);
6float absolute(float);
7int main() {
8 int a = -5;
9 float b = 5.5;
10
11 cout << "Absolute value of " << a << " = " << absolute(a) << endl;
12 cout << "Absolute value of " << b << " = " << absolute(b);
13 return 0;
14}
15int absolute(int var) {
16 if (var < 0)
17 var = -var;
18 return var;
19}
20float absolute(float var){
21 if (var < 0.0)
22 var = -var;
23 return var;
24}
خروجی
Absolute value of -5 = 5 Absolute value of 5.5 = 5.5
در مثال فوق، دو تابع ()absolute به صورت overload شده هستند. هر دو تابع آرگومان منفردی میگیرند. با این حال، یک تابع مقدار integer به عنوان آرگومان میگیرد و آرگومان دیگر از نوع float است. زمانی که تابع ()absolute با یک آرگومان integer فراخوانی شود، این تابع فراخوانی میشود:
1int absolute(int var) {
2 if (var < 0)
3 var = -var;
4 return var;
5}
اما زمانی که تابع ()absolute با یک آرگومان float فراخوانی شود، تابع زیر فراخوانی میشود:
1float absolute(float var){
2 if (var < 0.0)
3 var = -var;
4 return var;
5}
بدین ترتیب به پایان این بخش از سری مقالات آموزش زبان برنامهنویسی ++C میرسیم. برای مطالعه بخش بعدی به لینک زیر رجوع کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامه نویسی C++
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش ++C — راهنمای شروع یادگیری
- حلقه for در زبان برنامه نویسی ++C — به زبان ساده
==