سربارگذاری عملگر ورودی و خروجی << >> در زبان C++
شاید گاهی لازم باشد عملکرد عملگر های ورودی و خروجی را در برنامه های خود (معمولا برنامه های کنسولی) به صورت دلخواه تغییر دهیم تا بتوانیم آنها را برای اشیاء کلاس هایمان به صورت صحیح کار ببریم. سربارگذاری عملگر های ورودی و خروجی را در این پست با یک نمونه ساده در مورد "تاریخ" (date) نشان داده شده است. به کلاس ساده زیر توجه کنید.
class date
{
public:
int day, month, year;
date (int day, int month, int year)
{
this->day = day;
this->month = month;
this->year = year;
}
};
کلاس date دارای سه عضو عمومی برای روز، ماه و سال است و یک سازنده برای مقدار دهی این اعضا دارد. البته اعضای کلاس معمولا باید به صورت خصوصی تعریف شوند ولی ما در این مین مثال ساده ترین گزینه را در نظر می گیریم. سربارگذاری عملگر های ورودی و خروجی باید در بیرون کلاس صورت گیرند. در ادامه به ترتیب سربارگذاری برای عملگر ورودی و خروجی تعریف شده است. ما می خواهیم که بتوانیم تاریخ را به صورت یکجا (مثلا 22/3/1396 وارد کنیم یا در خروجی چاپ کنیم، پس باید این عملگر های را به گونه ای که مورد نظر ماست دستکاری کنیم).
istream &operator>> (istream &output, date &day)
{
char slash;
output >> day.day >> slash >> day.month >> slash >> day.year;
return output;
}
ostream &operator<< (ostream &output, date day)
{
return output << day.day << "/" << day.month << "/" << day.year;
}
عملگر << از نوع istream و عملگر >> از نوع ostream است. برای همین نوع بازگشتی توابع را از این انواع تعیین می کنیم. این توابع باید دارای دو پارامتر باشند که پارامتر اول شیئی از نوع ذکر شده برای خروجی است و پارمتر دوم شیئی از کلاس date است که دربردارنده سه عضو روز، ماه و سال است. اگر این اعضا خصوصی تعریف شده بود باید از توابع دستیابی برای دسترسی به آنها استفاده می کردیم ولی چون اینجا اعضا، عمومی هستند نیازی به این کار نیست.
تابع اول به نحوی تعریف شده است که روز، ماه و سال را یکجا از از کاربر دریافت می کند و مقدار آنها را در متغیر های عضو قرار می دهد؛ کاراکتر اسلش / به عنوان جدا کننده انها به کار رفته است همانطور که هنگام نوشتن تاریخ از آن برای جدا کردن روز، ماه و سال استفاده می کنیم. تابع دوم ساده تر از تابع اول است و تنها سه متغیر عضو را همراه با کاراکتر اسلش برای جداسازی در خروجی چاپ می کند. حالا می توانیم این این دو عملگر را برای اشیاء کلاس date به صورت مستقیم به کار ببریم و تاریخ را یکجا از ورودی دریافت یا در خروجی نمایش دهیم.


GENERAL INFORMATION