به توابع هم نامی که آرگومان (ها)ی متفاوتی دارند، توابع سربارگذار می گویند. در این آموزش، سربارگذاری توابع را به همراه مثال یاد خواهید گرفت.
تابع اشاره به بخشی از کد دارد که کار خاصی انجام می دهند. در برنامه نویسی ++C، دو تابع می توانند نام یکسانی داشته باشند، ولی باید تعداد یا نوع آرگومان هایشان متفاوت باشد. این توابع در تعداد یا نوع (یا هر دو) آرگومان ها تفاوت دارند و به عنوان توابع سربارگذار شناخته می شوند. به عنوان مثال:
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
در اینجا، تمام ۴ تابع، توابع سربارگذار هستند، زیرا آرگومان (ها)ی ارسالی به توابع متفاوت اند.
توجه داشته باشید که نوع بازگشتی این ۴ تابع یکسان نیستند. توابع سربارگذار ممکن است نوع بازگشتی متفاوت داشته باشند یا نداشته باشند، اما باید آرگومان های متفاوت داشته باشند.
// Error code
int test(int a) { }
double test(int b){ }
تعداد و نوع آرگومان های ارسال شده به این دو توابع مشابه هستند هر چند نوع بازگشتی متفاوت است. از این رو، کامپایلر خطا می دهد.
مثال ۱ : سربار گذاری توابع در C++
#include <iostream>
using namespace std;
void display(int);
void display(float);
void display(int, float);
int main() {
int a = 5;
float b = 5.5;
display(a);
display(b);
display(a, b);
return 0;
}
void display(int var) {
cout << “Integer number: ” << var << endl;
}
void display(float var) {
cout << “Float number: ” << var << endl;
}
void display(int var1, float var2) {
cout << “Integer number: ” << var1;
cout << ” and float number:” << var2;
}
خروجی
Integer number: 5
Float number: 5.5
Integer number: 5 and float number: 5.5
در اینجا، تابع ()display سه بار با نوع یا تعداد متفاوت آرگومان صدا زده شده است.
نوع بازگشتی همه ی توابع یکسان است، اما الزام نیست.
مثال ۲ : سر بار گذاری توابع در C++
// Program to compute absolute value
// Works both for integer and float
#include <iostream>
using namespace std;
int absolute(int);
float absolute(float);
int main() {
int a = -5;
float b = 5.5;
cout << “Absolute value of ” << a << ” = ” << absolute(a) << endl;
cout << “Absolute value of ” << b << ” = ” << absolute(b);
return 0;
}
int absolute(int var) {
if (var < 0)
var = -var;
return var;
}
float absolute(float var){
if (var < 0.0)
var = -var;
return var;
}
خروجی
Absolute value of -5 = 5
Absolute value of 5.5 = 5.5
در مثال بالا، دو توابع ()absolute سربارگذاری دارند.
هر دو تابع یک آرگومان دارند. با این حال، یک تابع integet می گیرد و دیگری float .
هنگامی که تابع ()absolute با آرگومان صحیح صدا زده می شود، تابع زیر فراخوانی می شود:
int absolute(int var) {
if (var < 0)
var = -var;
return var;
}
هنگامی که تابع ()absolute با آرگومان float صدا زده می شود، تابع زیر فراخوانی می شود:
float absolute(float var){
if (var < 0.0)
var = -var;
return var;
}