اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

تاریخچه‌ی ویرایش برای ارسال #1572

پنجشنبه ۲ خرداد ۱۳۹۲ ارسال شده توسط CPP_Crawler4

جایی خوندم که همچین چیزی به عنوان یه اصطلاحه که میذاره کارهایی انجام بدیم که مستقیما تو C++ ساپورت نمیشه.
و کد زیر آورده شده که تو اون اثر سازنده مجازی بوسیله تابع عضو clone() و تابع عضو create() که مجازی هستن دیده میشه:

class Shape {
public:
virtual ~Shape() { } // A virtual destructor
virtual void draw() = 0; // A pure virtual function
virtual void move() = 0;
...
virtual Shape* clone() const = 0; // Uses the copy constructor
virtual Shape* create() const = 0; // Uses the default constructor
};

class Circle : public Shape {
public:
Circle* clone() const; // Covariant Return Types; see below
Circle* create() const; // Covariant Return Types; see below
...
};

Circle* Circle::clone() const { return new Circle(*this); }
Circle* Circle::create() const { return new Circle(); }
در تابع عضو clone()، دستور `new Circle(*this)` کپی سازنده Circle رو صدا میزنه تا محتوای this رو در شیء جدید ایجادشده Circle کپی کنه.
پنجشنبه ۲ خرداد ۱۳۹۲ ویرایش شده توسط CPP_Crawler4

جایی خوندم که همچین چیزی به عنوان یه اصطلاحه که میذاره کارهایی انجام بدیم که مستقیما تو C++ ساپورت نمیشه.
و کد زیر آورده شده که تو اون اثر سازنده مجازی بوسیله تابع عضو clone() و تابع عضو create() که مجازی هستن دیده میشه:

class Shape {
public:
virtual ~Shape() { } // A virtual destructor
virtual void draw() = 0; // A pure virtual function
virtual void move() = 0;
...
virtual Shape* clone() const = 0; // Uses the copy constructor
virtual Shape* create() const = 0; // Uses the default constructor
};

class Circle : public Shape {
public:
Circle* clone() const; // Covariant Return Types; see below
Circle* create() const; // Covariant Return Types; see below
...
};

Circle* Circle::clone() const { return new Circle(*this); }
Circle* Circle::create() const { return new Circle(); }
در تابع عضو clone()، دستور `new Circle(*this)` کپی سازنده سازنده کپی Circle رو صدا میزنه تا محتوای this رو در شیء جدید ایجادشده Circle کپی کنه.