پاسخ داده شده: کلاس ها در برنامه نویسی سی پلاس پلاس
سلام؛ در این مواقع باید شما عمل 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; return 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; return in; }
حالا به راحتی میتونید از عملگرهای >> و << به ازاء کلاس my_class استفاده کنید:
int main() { my_class a; std::cin >> a; std::cout << a; }