سربارگذاری عملگر ها (C++)
در برنامه نویسی، هنگام کار با متغیر ها و انواع ساده مانند int و float با عملگر های ریاضی مانند + ، * ، - و = کار میکنیم و نتیجه ای که انتظار داریم را بدون مشکلی دریافت می کنیم؛ ولی وقتی یک کلاس تعریف می کنیم و اشیاءِ از آن ایجاد می کنیم ممکن است این عملگر ها به درستی با آشیاء کلاس کار نکنند، به این دلیل که با تعریف یک کلاس، نوعی جدیدی را به وجود آورده اید که شاید با این عملگر ها سازگار نباشد.
برای این مواقع، C++ امکان "سربارگذاری عملگر ها" (Operator Overloading) را تدارک دیده است. سربارگذاری به معنی تعریف کردن/اضافه کردن یک عملکرد برای/به یک عملگر است. هر کلاس می تواند تعریف خاص خود را برای یک عملگر داشته باشد و این تعریف تنها برای همان کلاس معتبر خواهد بود. در ادامه این تکنیک را با ذکر یک مثال ساده (و غیر اصولی) برای عملگر + توضیح می دهیم.
سربارگذاری عملگر + :
کلاس زیر را در نظر بگیرید :
class Sample
{
public :
// constructor
Sample (int Input)
{
a = Input;
}
// overloading +
void operator+ (const Sample& obj)
{
a += obj.a;
}
private:
int a;
};
// constructor
Sample (int Input)
{
a = Input;
}
// overloading +
void operator+ (const Sample& obj)
{
a += obj.a;
}
private:
int a;
};
کلاس Sample یک کلاس ساده با یک تابع سازنده، یک تابع برای سربارگذاری عملگر + و یک متغیر عضو به نام a، است. به نحوه ی تعریف تابع سربارگذاری دقت کنید، این تابع از کلمه ی کلیدی operator به همراه عملگر مورد نیاز تشکیل شده است و دارای یک پارامتر از نوع ارجاع کلاس خود است. وظیفه ی این تابع جمع کردن متغیر عضو شی حاضر، با متغیر عضو شیئی است که به آن فرستاده می شود. در این تابع میتوان هر گونه عملکرد دلخواه را برای یک عملگر تعریف کرد. بدنه این تابع در درون کلاس نوشته شده است ولی میتوان این کار را خارج از آن نیز انجام داد. حالا فرض کنید دو شی از کلاس در اختیار دارید،
Sample obj1, obj2;
و میخواهید که آنها را با یکدیگر جمع کنید؛ با تعریف سربارگذاری عملگر + به صورت بالا می توانید این دو شی را به صورت زیر با کدیگر جمع کنید.
obj1 + obj2;
در کد بالا متغیر عضو شی obj1 یعنی a با همتای خود در شی obj2 جمع می شود. این شاید ساده ترین و بی استفاده ترین نوع سربارگذاری برای یک متغیر باشد ولی مفهوم کلی این تکنیک را نمایان می کند. سربارگذاری عملگر ها در برنامه نویسی به زبان C++ بسیار اهمیت دارند، به همین دلیل در پست های بعد نمونه های کاربردی تری از آنها را به همراه کاربرد اشاره گر this برای سربارگذاری صحیح یک عملگر را بررسی می کنیم.
+ نوشته شده در جمعه نهم تیر ۱۳۹۱ ساعت 14:40 توسط MEC
GENERAL INFORMATION