|
مبانی گرانبار کردن عملگرها |
در مباحث قبلی دیدید که برای کار با اشیای یک کلاس، شیوه فراخوانی
توابع عضو را به کار بردیم. به عنوان مثال توسط یک تابع عضو، اعضای
یک کلاس را مقداردهی کردیم و یا توسط تابع عضو دیگری مقدار عضو یک
کلاس را نمایش دادیم. این کار برای برخی از کلاسها، خصوصا کلاسهای
ریاضی دشوار می باشد. برای این کار می توان از مجموعه عملگرهای
زبان
C++
استفاده کرد، البته برای به کار بردن عملگرهای زبان
C++
برای کلاسهایی که ما می سازیم، این عملگرها باید آماده سازی شوند.
به این کار گرانبار کردن عملگرها گفته می شود. به عنوان مثال
عملگرهای + یا - در زبان
C++
گرانبار شده اند. این عملگرها با توجه به نوع عملوندهای خود که
اعداد صحیح یا اعشاری می باشند، به شیوه متفاوتی عمل می کنند.
گرچه
C++
اجازه ایجاد عملگر جدیدی را به ما نمی دهد، ولی برنامه نویسان را
قادر می سازد تا اکثر عملگرهای این زبان را برای جایی که می خواهند
آنها را به کار ببرند، گرانبار کنند. در حالتی که عملگری گرانبار
شده باشد، با توجه به جایی که این عملگر به کار رفته، کامپایلر کد
مرتبط به آن را به صورت خودکار تولید می کند. ضمنا کاری که توسط
عملگرها انجام می شود، توابع نیز می توانند انجام دهند. ولی معمولا
عملگرها وضوح برنامه را بیشتر می کنند.
برای گرانبار کردن يک عملگر کافی است يک تابع برای آن تعريف کنيد ،
البته نام تابع بايد متشکل از کلمه
operator
و نماد عملگر مورد نظر باشد. به عنوان مثال نام تابعی که عملگر
+ را گرانبار می کند بايد +operator
باشد. در برنامه زير عملگر + را برای محاسبه مجموع دو نقطه مختصات
گرانبار کرده ايم:
#include <iostream.h>
class CVector
{
public:
CVector (int =0 ,int =0 );
CVector operator+ (CVector);
void showCVector(void);
private:
int x,y;
};
CVector::CVector (int a, int b)
{
x = a;
y = b;
}
CVector CVector::operator+ (CVector vector)
{
CVector temp;
temp.x = x + vector.x;
temp.y = y + vector.y;
return temp;
}
void CVector::showCVector(void)
{
cout << "("<< x << "," << y << ")";
}
int main ()
{
CVector a (3,1);
CVector b (1,2);
CVector c;
c = a + b;
a.showCVector();
cout << "+";
b.showCVector();
cout << "=";
c.showCVector();
return 0;
}
خروجی برنامه به صورت زير می باشد :
|