سربارگذاری تابع Function Overloading
سربارگذاری تابع یا Function Overloading چیست؟
منظور از سربارگذاری تابع در برنامه نویسی، ایجاد نسخههای مختلفی از یک تابع با نام یکسان است که قادر به انجام کارهای تقریبا مشابهی هستند. در واقع تابع سربارگذاری شده دارای چندین پیاده سازی است که بسته به نیازهای مختلف برنامه، هر پیاده سازی دستورات متفاوتی را اجرا میکند.
برای مثال یک تابع فرضی به نام Multiply را درنظر بگیرید. نسخهای از این تابع دارای یک پارامتر است که عددی صحیح را دریافت میکند. در این نسخه، عدد دریافتی در عدد 2 ضرب شده و حاصل به عنوان خروجی برگردانده میشود. پیاده سازی دیگری از تابع Multiply دارای دو پارامتر از نوع عدد صحیح (integer) است که عدد اول را به عنوان عملوند اول و عدد دوم را به عنوان عملوند دوم ضرب در نظر میگیرد. هنگام فراخوانی این تابع، در صورتی که تنها یک پارامتر تعیین شود کامپایلر (مفسر) متوجه میشود که باید از نسخهی اول استفاده کند و در صورتی که دو پارامتر وارد شود از نسخهی دوم استفاده خواهد شد.
برنامهی زیر به زبان C++ نحوهی پیاده سازیهای فوق را نمایش میدهد. دقت کنید اولین فراخوانی این تابع در main مقدار 200 (حاصل ضرب 100 در عدد 2) را برمیگرداند و فراخوانی دوم، مقدار 400 (حاصل ضرب 100 در عدد 4) را برمیگرداند.
#include <iostream> using namespace std; int Multiply(int a) { return a*2; } int Multiply(int a, int b) { return a*b; } int main() { cout << Multiply(100); cout << Multiply(100, 4); }
برای اینکه هنگام فراخوانی مشخص شود باید از کدام نسخهی تابع سربارگذاری شده استفاده شود لازم است نوع یا تعداد پارامترهای تابع در پیاده سازیهای مختلف متفاوت باشد. به عنوان مثال نمیتوان تابع Power فوق را به شکلی ایجاد نمود که در هر دو نسخه یک پارامتر، آن هم از نوع integer دریافت کند. دقت داشته باشید در تعداد نسخههای overload شدهی تابع هیچ محدودیتی وجود ندارد اما قانون فوق باید رعایت شود.
یکی از کاربردهای رایج سربارگذاری تابع در مورد توابع سازنده (Constructor) کلاسها دیده میشود. معمولا نسخهای از تابع سازنده بدون پارامتر تعریف میشود و مقادیر متغیرهای عضو کلاس را با یک مقدار پیش فرض (مثل صفر) مقداردهی میکند. نسخهای دیگر نیز مقادیر مورد نظر کاربر را از طریق پارامترهایی دریافت میکند و به متغیرها تخصیص میدهد.
پیوندهای پیشنهادی تک دیک