چرا تعریف مجدد عملگر استفاده می شود؟
می توان هر برنامه C++ را بدون دانستن و پیاده سازی مجدد عملگرها نوشت. با این حال، سربارگذاری عملگر توسط برنامه نویسان، برای ایجاد یک برنامه قابل درک استفاده می شود. مثلا
می توانید کد را اینطور جایگزین کنید:
calculation = add(multiply(a, b),divide(a, b));
به
calculation = (a*b)+(a/b);
چگونه عملگرها را در C++ تعریف مجدد کنیم؟
برای تعریف مجدد عمگر، یک تابع عملگر خاص در داخل کلاس تعریف می شود:
class className
{
… .. …
public
returnType operator symbol (arguments)
{
… .. …
}
… .. …
};
در اینجا، returnType نوع بازگشتی تابع است.
symbol نماد عملگریست که می خواهید آن را مجددا تعریف کنید. مانند: +، <، -، ++
می توانید آرگومان را به روش مشابه قبلی به تابع عملگر ارسال کنید.
مثال: سربارگذاری عملگر در برنامه نویسی C++
#include <iostream>
using namespace std;
class Test
{
private:
int count;
public:
Test(): count(5){}
void operator ++()
{
count = count+1;
}
void Display() { cout<<“Count: “<<count; }
};
int main()
{
Test t;
// this calls “function void operator ++()” function
++t;
t.Display();
return 0;
}
این تابع هنگامی که عملگر ++ بخواهد بر روی شیء کلاس
Test (object t در این مورد)
عمل کند، صدا زده می شود.
در برنامه، تابع عملگر
void operator ++()
در کلاس Test تعریف شده است.
این تابع مقدار count را برای شیء t یک واحد افزایش می دهد.
نکات مهم
۱- سربارگذاری عملگر اجازه می دهد تا مجددا عملگر را تعریف کنید که فقط برای انواع تعریف شده توسط کاربر (اشیا، ساختارها) کار می کند. نمی تواند برای انواع int، float، char و غیره استفاده شود.
۲- دو اپراتور = و & فعلا در C++ به طور پیش فرض تعریف مجدد شده اند.. به عنوان مثال: برای کپی اشیاء از کلاس مشابه، می توانید مستقیما از عملگر = استفاده کنید. نیازی به ایجاد تابع عملگر ندارید.
۳- سربارگذاری عملگرها نمی تواند اولویت و وابستگی آن ها را تغییر دهد. با این حال، اگر می خواهید به آن ها اولویت دهید، باید از پرانتز استفاده کنید.
۴- چهار عملگر در C++ وجود دارد که نمیتوان آن ها را تعریف مجدد کرد. :: (تشخیص حوزه)، . (انتخاب عضو)، * (انتخاب عضو از طریق اشاره گر به تابع) و 😕 (عملگر سه جانبه).
بهترین روش ها را هنگام استفاده از سربارگذاری عملگر دنبال کنید
همانطور که خواندید تعریف مجدد عملگر، اجازه می دهد تا نحوه کار آن را دوباره مشخص کنید.
در مثال بالا، عملگر ++ بر روی شیء عمل می کند تا مقدار count را یک واحد افزایش دهد.
void operator ++()
{
count = count+1;
}
با این حال، اگر از کد زیر استفاده می کنید، هنگامی که عملگر ++ استفاده می شود، مقدار count 100 کاهش می یابد.
void operator ++()
{
count = count-100;
}
کد بالا از لحاظ فنی درست اما گیج کننده و درک آن دشوار است.
شغل شما به عنوان یک برنامه نویس، استفاده به موقع و درست از سربارگذاری عملگرهاست.
در مثال بالا، وقتی عملگر ++ استفاده می شود، مقدار count یک واحد افزایش می یابد. با این حال، این برنامه ناقص است زیرا نمی توانید از کد زیر استفاده کنید چون که نوع بازگشتی از تابع عملگر، void است.
t1 = ++t
پایان قسمت بیست و هفتم