PDA

View Full Version : سوال: طراحی بدنه توابع دوست عضو کلاس.



mohammad0773
پنج شنبه 08 مرداد 1394, 12:14 عصر
سلام
من به تازگی ها یک تابع دوست عضو کلاس نوشتم برای گرفتن مقدار متغیر های عضو کلاس ولی نمیدونم چحوری خارج از کلاس بدنه رو تعریف کنم.منظورم تابع زیر هست:

friend istream& operator>>(istream &is,class_name& cl);

اینو من جوری نوشتم که به این دستور فرا خونده بشه:

cin>>member_of_myclass;

پیشاپیش از پاسخ هاتون سپاسگزارم.:لبخندساده:

ehsan_faal
پنج شنبه 08 مرداد 1394, 13:35 عصر
سلام.
اینو توی فایل هدر نوشتم:
friend ostream& operator<<(ostream&,const TestClass&);

و برای تعریفش توی .cpp :
ostream& operator<<(ostream &Output, const TestClass&instance)
{
Output<<instance.field1<<" "<<instance.field2<<endl;
return Output;
}
فقط یادت باشه iostream رو و namespace std رو هم استفاده کنی.
برای گرفتن مقادیر هم مشابه همین میتونی بنویسی

mohammad0773
پنج شنبه 08 مرداد 1394, 22:52 عصر
سلام.
اینو توی فایل هدر نوشتم:
friend ostream& operator<<(ostream&,const TestClass&);

و برای تعریفش توی .cpp :
ostream& operator<<(ostream &Output, const Test &instance)
احسن،مشکلم حل شد.ولی یه سوال داشتم چرا ما باید از ارجاع استفاده کنیم (منظورم نوع تابع هست).اگه نمیتونید ولش کنید زیاد نیاز به دونستنش ندارم.
{
Output<<instance.field1<<" "<<instance.field2<<endl;
return Output;
}
فقط یادت باشه iostream رو و namespace std رو هم استفاده کنی.
برای گرفتن مقادیر هم مشابه همین میتونی بنویسی
سلام مشکلم حل شد.ولی یه سوال داشتم:چرا نوع این عملگر باید از نوع ارجاع باشد؟اگه نمیدونید ولش کنید،زیاد نیاز به دونستنش ندارم.

ehsan_faal
جمعه 09 مرداد 1394, 10:15 صبح
سلام.
برای استفاده ی زنجیره ای از این اپراتور باید از رفرنس استفاده کنیم.
پاسخ کاملترش اینجاست:
Why we need to return reference to istream/ostream while overloading >> and << operators (http://stackoverflow.com/questions/28913009/why-we-need-to-return-reference-to-istream-ostream-while-overloading-and-o)