کلاس ها در برنامه نویسی سی پلاس پلاس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کلاس ها در برنامه نویسی سی پلاس پلاس

0 امتیاز
در کلاس ها برای این که ما ورودی داشته باشیم باید به چه صورت عمل کنیم؟

چون که ما نمی تونیم به صورت مستقیم cinداشته باشیم

می شه یکم توضیح بدید
سوال شده خرداد 1, 1399  بوسیله ی yz (امتیاز 64)   4 7
ویرایش شده خرداد 1, 1399 بوسیله ی مصطفی ساتکی

1 پاسخ

0 امتیاز

سلام؛ در این مواقع باید شما عمل Operator Overloading رو انجام بدید به این‌صورت که عملگرهای مربوطه رو به ازاء ورودی‌ای از نوع کلاس خودتون تعریف کنید. در Chapter 9 :

https://learncpp.com/

می‌تونید توضیحات خیلی خوبی در این زمینه پیدا کنید، امّا برای مثال فرض کنید که ما این کلاس را داریم :

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;
}

 

پاسخ داده شده خرداد 1, 1399 بوسیله ی mg_ramezani (امتیاز 727)   1 1 12
ویرایش شده خرداد 1, 1399 بوسیله ی mg_ramezani
...