Mencipta Salinan Kelas Terbitan daripada Penunjuk Kelas Asas
Pertimbangkan cabaran untuk mencipta salinan dalam contoh kelas terbitan daripada penuding kepada kelas asas polimorfiknya. Ini boleh menjadi rumit, kerana bergantung pada ID berbilang jenis atau hantaran dinamik dalam pernyataan if boleh menjadi membosankan dan memperkenalkan implikasi prestasi.
Pendekatan pilihan melibatkan menggabungkan kaedah maya dalam kelas asas, yang dikenali sebagai clone() atau salinan(). Kaedah ini harus mengembalikan penunjuk kepada salinan kelas terbitan yang baru dibuat. Dengan melaksanakan kaedah ini dalam setiap kelas terbitan, proses penyalinan menjadi bebas daripada jenis kelas terbitan tertentu.
Sebagai alternatif, untuk mengelakkan pertindihan kod, simpulan bahasa Curiously Recurring Template Pattern (CRTP) boleh digunakan. Menggunakan templat, kelas pembantu boleh dibuat yang mewakilkan operasi salin kepada pembina kelas terbitan.
Pelaksanaan Menggunakan Kaedah Klon():
<code class="cpp">class Base { virtual Base* clone() const = 0; }; class Derived1 : public Base { Base* clone() const { return new Derived1(*this); } }; class Derived2 : public Base { Base* clone() const { return new Derived2(*this); } }; Base* CreateCopy(Base* base) { return base->clone(); }</code>
Pelaksanaan Menggunakan Idiom CRTP:
<code class="cpp">template <class Derived> class DerivationHelper : public Base { public: Base* clone() const { return new Derived(static_cast<Derived&>(*this)); } }; class Derived1 : public DerivationHelper<Derived1> { ... }; class Derived2 : public DerivationHelper<Derived2> { ... };</code>
Atas ialah kandungan terperinci Bagaimana untuk Menyalin Kelas Terhasil daripada Penunjuk Kelas Asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!