پاسخ داده شده: کلاس ها در برنامه نویسی سی پلاس پلاس
سلام؛ در این مواقع باید شما عمل Operator Overloading رو انجام بدید به این صورت که عملگرهای مربوطه رو به ازاء ورودی ای از نوع کلاس خودتون تعریف کنید. در Chapter 9 :
می تونید توضیحات خیلی خوبی در این زمینه پیدا کنید، امّا برای مثال فرض کنید که ما این کلاس را داریم :
struct person
{ unsigned short age; std::string name;
};
class my_class
{
private: person m_person;
public: my_class() = default;
};
برای اینکه بتونید با استفاده از عملگرهای << یا >> اقدام به مقداردهی و یا چاپ مقادیرشون بکنید باید دو تابع:
std::ostream& operator<<(std::ostream& out, const T& my_type); std::istream& operator>>(std::istream& in, T& my_type);
که اینجا T نوع کلاس شماست را باید برای کلاستون پیاده سازی کنید، امّا توجه کنید که شما نمی توانید اینارو عضوی از کلاستون تعریف کنید چرا عملگرهای << و >> تنها دو ورودی دریافت می کنند و وقتی که شما آن ها رو عوض کلاس تعریف کنید در پس زمینه دو ورودی تبدیل به سه ورودی میشه (یکی هم اشاره گری به شئ شما از کلاس) که این باعث ایجاد خطا میشه. برای حل این مشکل باید این توابع رو به صورت friend برای کلاستون اعلان کنید به این صورت:
friend std::ostream& operator<<(std::ostream& out, const my_class& c); friend std::istream& operator>>(std::istream& in, my_class& c);
و تعریفشان :
std::ostream& operator<<(std::ostream& out, const my_class& c)
{ out << "name : " << c.m_person.name << std::endl; out << "age : " << c.m_person.age << std::endl; retu out;
}
std::istream& operator>>(std::istream& in, my_class& c)
{ std::clog << "Enter name : "; std::getline(in, c.m_person.name); std::clog << "Enter age : "; in >> c.m_person.age; retu in;
}
حالا به راحتی می تونید از عملگرهای >> و << به ازاء کلاس my_class استفاده کنید:
int main()
{ my_class a; std::cin >> a; std::cout << a;
}
