سلام!
این جلسه می خواهیم عمل گر های ++ و -- را هم به صورت پیشوندی (prefix) و هم به صورت پسوندی (postfix) سربارگذاری کنیم.
اوّل از همه باید فرق عمل گر های پیشوندی و پسوندی را متوجه شویم. خروجی برنامه ی زیر را با برنامه ی زیر آن مقایسه کنید.
#include <iostream>
using namespace std;
int main(){
int a = 0;
cout << a++ << endl;
return 0;
}
#include <iostream>
using namespace std;
int main(){
int a = 0;
cout << ++a << endl;
return 0;
}
متوجه می شوید که اگر عمل گر ++ به صورت پیشوندی ظاهر شود، مقدار اضافه شده را برمی گرداند و اگر به صورت پسوندی استفاده شود، مقدار قبلی متغیر را برمی گرداند. این توضیح برای عمل گر -- هم صدق می کند.
حال این سوال پیش می آید که چه گونه این عمل گر ها را برای یک class پیاده سازی کنیم؟ فرض کنید که می خواهید عمل گر ++ را به صورت پیشوندی برای Point تعریف کنید. برای این کار باید کدی مانند کد زیر بنویسید؛
Point operator++(Point &p){
p.setX(p.x() + 1);
p.setY(p.y() + 1);
return p;
}
برای این که همین عمل گر را به صورت پسوندی تعریف کنید، باید از کد زیر استفاده کنید؛
Point operator++(Point &p, int){
Point p2 = p;
p.setX(p.x() + 1);
p.setY(p.y() + 1);
return p2;
}
در واقع یک ورودی int هم به ورودی ها اضافه می کنید. این کار باعث می شود که compiler بفهمد این یک عمل گر پسوندی است.
برای تمرین، عمل گر های ++ و -- را به صورت پیشوندی و پسوندی برای Point تعریف کنید.
موفق باشید!