سربارگذاری عملگر ها (Operator OverLoading)
به تعریف مجدد راه و روش اجرای عملگر ها توسط ما ، سربارگذاری عملگرها گفته می شود. فرض کنید می خواهید عدد ۲ را به یک مقدار datetime اضافه کنید. خطای زیر حاصل خواهد شد:
جالب بود اگر می توانستیم عدد ۲ را به datetime اضافه کنیم و نتیجه ی آن تعداد روزهای مشخص بعلاوه ی دو می بود. اینگونه توانایی ها را می توان بوسیله ی operator overloading ایجاد کرد.
تنها عملگر های زیر را می توان overload کرد:
+ – ! ~ ++ — true false
Binary Operators
+ – * / % & | ^ << >> == != > < >= <=
نحوه ی انجام اینکار نیز در حالت کلی به صورت زیر است:
{
}
به مثال زیر توجه کنید:
class MyDate
{
public DateTime tempDate;
public MyDate(int year,int month,int day)
{
tempDate=new DateTime(year,month,day);
}
public static DateTime operator + (MyDate D,int noOfDays)
{
return D.tempDate.AddDays(noOfDays);
}
public static DateTime operator + (int noOfDays,MyDate D)
{
return D.tempDate.AddDays(noOfDays);
}
}
class Test
{
static void Main()
{
MyDate MD=new MyDate(2001,7,16);
Console.WriteLine(MD + 10 );
}
}
output:
2001-07-26
در مثال فوق عملگر + دوبار overload شده است. یکبار توسط آن می توان یک عدد صحیح را به یک تاریخ اضافه کرد و بار دیگر یک یک تاریخ را می توان به عدد صحیح افزود.
موارد زیر را هنگام سربارگذاری عملگرها به خاطر داشته باشید:
۱- تنها اپراتورهای ذکر شده را می توان overload کرد. اپراتورهایی مانند new,typeof, sizeof و غیره را نمی توان سربارگذاری نمود.
۲- خروجی متدهای بکار گرفته شده در سربارگذاری عملگر ها نمی تواند void باشد.
۳- حداقل یکی از آرگومانهای بکار گرفته شده در متدی که برای overloading عملگرها بکار می رود باید از نوع کلاس حاوی متد باشد.
۴- متدهای مربوطه باید به صورت public و static تعریف شوند.
۵- هنگامی که اپراتور < را سربارگذاری می کنید باید جفت متناظر آن یعنی > را هم سربارگذاری نمایید.
۶- هنگامیکه برای مثال + را overload می کنید خودبخود =+ نیز overload شده است و نیازی به کدنویسی برای آن نیست.
یکی از موارد جالب بکار گیری سربارگذاری عملگرها در برنامه نویسی سه بعدی و ساختن کلاسی برای انجام عملیات ماتریسی و برداری می باشد
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن