آموزش پاسکال شی‌گرا

Method Overloading در پاسکال شی‌گرا

Method Overloading در پاسکال شی‌گرا

شما میتوایند دو یا چند پروسیجر یا تابع هم نام داشته باشید که فقط پارامترهای آنها متفاوت باشند
تعجب کرده اید به این قابلیت Method Overloading میگویند
به متدهایی که از یک نام مشترک استفاده میکنند Overloaded Methods گفته میشود

در صورتیکه بخواهید تابعی داشته باشید که دو عدد از نوع Word یا از نوع Integer را در یکدیگر ضرب کند
چه خواهید کرد ؟ نسخه های قدیمی دلفی شما را مجبور می ساختند که چندین تابع با اسامی مختلف به وجود آورید

function MultiplyInt(Num1 ,Num2 : Integer) : Integer ;
function MultiplyInt(Num1 ,Num2 : Double) : Double ;
function MultiplyInt(Num1 ,Num2 : Word) : Word ;

به نظر شما بهتر نبود تابعی با نام  Multiply داشته باشید که ان قدر باهوش باشد تا بتواند تشخیص دهد
چه زمانی میخواهید دو عدد از نوع Integer و Double و Word  را در یکدیگر ضرب کنید
تعجب نکنید این عمل در حال حاضر امکان پذیر است

function MultiplyInt(Num1 ,Num2 : Integer) : Integer;Overload ;
function MultiplyInt(Num1 ,Num2 : Double) : Double;Overload ;
function MultiplyInt(Num1 ,Num2 : Word) : Word;Overload ;

توجه داشته باشید که هر یک از توابع فوق باید به صورت جداگانه پیاده سازی شوند
اما همگی تحت یک نام مشترک خواهند بود و این دلفی است
که در هنگام فراخوانی به صورت هوشمند با توجه به نوع پارامترها تشخیص میدهد که کدام یک را فراخوانی کند

var
 X , Y , Z : Double;
begin
 X := 1.5;
 Y := 10.5;
 Z := Multiply (X , Y) ;
end;

در فراخوانی فوق دلفی تشخیص میدهد که پارامتر های شما از نوع Double هستند
لذا تابع مورد نظر را به صورت هوشمند فراخوانی میکند
توجه دشاته باشید که شما میتوانید تعداد و نوع پارامترهای توابع Overload شده را به دلخواه تعیین کنید
اما نمیتوانید فقط مقدار بازگشتی توابع را تغییر دهید

function Multiply : Integer ; overload;
function Multiply : Double ; overload;

کامپایلر دلفی با دیدن عبارات فوق خطایی را صدارد میکند که به شما خواهد گفت
که پیاده سازی Multiply متفاوت با پیاده سازی قبلی است
لذا توجه داشته باشید که برای معرفی توابع Overload باید توابع مورد نظر به غیر از مقدار بازگشتی
در یک مورد دیگر (نظیر یک پارامتر) نیز با یکدیگر متفاوت باشند

function Multiply (P: Integer ):  Integer;overload;
function Multiply (P: Double ): Double ; overload;

 

[adinserter block="1"]
5/5 - (3 امتیاز)

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا