سلام!

این جلسه قرار است تمامی عمل گر هایی را که تا کنون طرز سربارگذاری آن ها را یاد گرفتیم، در خود class تعریف کنیم نه در بیرون آن. این نوع تعریف درست تر هم به نظر می آید چون عمل گر ها خود عضوی از class هستند پس باید درون آن تعریف شوند.

وقتی که یک عمل گر را درون بدنه ی class تغییر می دهید، ورودی اوّل آن به صورت پیش فرض یک object از نوع همان class است که درون آن هستیم. مثلا فرض کنید می خواهید عمل گر += را برای Point (که کد آن را طی جلسات پیش تا جای خوبی پیش بردیم) تغییر دهید. برای انجام این کار در درون کلاس باید بنویسید

void operator+=(const Point&);

حالا می خواهید که خود این تابع را بیرون از class تعریف کنید. برای این کار کافی است بنویسید

void Point::operator+=(const Point &p2){}

همان طور که احتمالا متوجه شده اید، پس نمی توان عمل گر هایی که ورودی اوّل آن ها یک object از class مورد نظر است، در خود class تغییر داد. تنها کاری که می توان کرد این است که عمل گر را به صورت friend تعریف کنیم. یعنی

friend istream &operator>>(istream &input, Point &p);

وقتی از friend استفاده کنید،‌ تابع مورد نظر جدا از کلاس تلقی می شود و برای همین هم اگر یک عمل گر friend تعریف کنیم، می توانیم ورودی اولش را خودمان تعیین کنیم.

تمرین

تمامی عمل گر هایی که تا کنون پیاده سازی کرده اید را درون class پیاده سازی کنید.

موفق باشید!