Menyalin Objek Polimorfik dalam C
Apabila bekerja dengan objek polimorfik, mencipta salinan mendalam objek selalunya diperlukan. Walau bagaimanapun, kaedah tradisional menggunakan pembina salinan dan operator beban lampau= mungkin tidak sesuai apabila jenis kelas terbitan khusus tidak diketahui pada masa penyusunan.
Pendekatan Kaedah Klon
Satu pendekatan biasa melibatkan pelaksanaan kaedah Klon maya dalam kelas asas. Setiap kelas terbitan kemudian melaksanakan versi Klonnya sendiri yang mencipta tika baharu bagi kelas terbitan tertentu dan menyalin ahli data.
Contoh:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: Derivedn* Clone() { Derivedn* ret = new Derivedn; copy all the data members return ret; } };
Jenis Pulangan Kovarian
Walau bagaimanapun, terdapat C yang lebih idiomatik cara untuk mengendalikan ini: jenis pulangan kovarian. Ini membenarkan kelas terbitan untuk mengembalikan penunjuk kepada jenis mereka sendiri daripada kaedah Klon.
Contoh Disemak:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: // Covariant return type, returns Derivedn* Derivedn* Clone() { return new Derivedn(*this); } private: Derivedn(const Derivedn&); // Copy constructor (possibly implicit or private) };
Dengan menggunakan jenis pulangan kovarian, pembina salinan digunakan secara tersirat untuk mencipta contoh baharu bagi kelas terbitan. Ini memudahkan pelaksanaan dan mengelakkan keperluan untuk menyalin ahli secara eksplisit.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyalin Objek Polimorfik Dalam C dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!