برنامه نویسی ۹۱۷ بازدید

تابع‌های Overload شده به توابعی گفته می‌شود که نامی یکسان اما آرگومان‌(های) متفاوتی دارند. در این مقاله به بررسی نمونه‌هایی از تابع‌های Overload شده می‌پردازیم. برای مطالعه بخش قبلی این مجموعه مقالات آموزشی به لینک زیر مراجعه کنید:

فهرست مطالب این نوشته

چنان که در بخش‌های قبلی صحبت کردیم تابع به معنی قطعه کدی است که به گروه‌بندی کد می‌پردازد و وظیفه خاصی را اجرا می‌کند. در برنامه‌نویسی ++C دو تابع به شرط این که تعداد و/یا نوع آرگومان‌هایی که ارسال می‌شوند متفاوت باشند، می‌توانند نام یکسانی داشته باشند.

در تابع‌های زیر نوع یا تعداد (و یا هر دوی) پارامترها متفاوت هستند و لذا به نام تابع‌های overload شده شناخته می‌شوند:

int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }

در قطعه کد فوق 4 تابع به صورت تابع‌های overload شده هستند، زیرا آرگومان(های) ارسالی به این تابع‌ها متفاوت هستند. توجه داشته باشید که نوع بازگشتی هر 4 تابع یکسان هستند. تابع‌های overload شده ممکن است نوع بازگشتی متفاوتی داشته باشند یا نداشته باشند، اما حتماً باید آرگومان‌های متفاوتی داشته باشند.

// Error code
int test(int a) { }
double test(int b){ }

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

مثال 1

overload کردن تابع:

#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 سه بار با انواع یا تعداد متفاوتی از آرگومان‌ها فراخوانی می‌شود. نوع بازگشتی همه این تابع‌ها یکسان است، اما الزامی برای این مسئله وجود ندارد.

مثال 2

overload کردن تابع:

// 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 به صورت overload شده هستند. هر دو تابع آرگومان منفردی می‌گیرند. با این حال، یک تابع مقدار integer به عنوان آرگومان می‌گیرد و آرگومان دیگر از نوع float است. زمانی که تابع ()absolute با یک آرگومان integer فراخوانی شود، این تابع فراخوانی می‌شود:

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;
}

بدین ترتیب به پایان این بخش از سری مقالات آموزش زبان برنامه‌نویسی ++C می‌رسیم. برای مطالعه بخش بعدی به لینک زیر رجوع کنید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» در رشته‌های ریاضیات کاربردی و مهندسی کامپیوتر به تحصیل پرداخته و شیفته فناوری است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار با مجله فرادرس همکاری دارد.