Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyalin Dalam Objek Polimorfik dalam C Apabila Kelas Terbitan Tidak Diketahui?

Bagaimana untuk Menyalin Dalam Objek Polimorfik dalam C Apabila Kelas Terbitan Tidak Diketahui?

DDD
Lepaskan: 2024-12-02 02:28:10
asal
657 orang telah melayarinya

How to Deep Copy a Polymorphic Object in C   When the Derived Class is Unknown?

Penyalinan Objek Polimorfik dalam C

Soalan:

Dalam C , bagaimana boleh deep salinan contoh kelas asas dibuat apabila kelas terbitan tepat adalah tidak diketahui?

Jawapan:

Menggunakan Kaedah Klon Maya

Untuk menyalin secara mendalam objek polimorfik, pendekatan berikut boleh digunakan:

  1. Tentukan kaedah Klon() maya dalam kelas asas Pangkalan.
  2. Laksanakan kaedah Klon() dalam setiap kelas terbitan untuk mencipta contoh baharu bagi kelas terbitan yang sepadan dan menyalin semua ahli data yang diperlukan.

Menggunakan Pulangan Kovarian Taip

Walau bagaimanapun, terdapat более "C " pendekatan:

  1. Tentukan pembina salinan untuk setiap kelas terbitan.
  2. Timpa kaedah Clone() dalam setiap kelas terbitan untuk mengembalikan contoh baharu kelas terbitan yang sepadan menggunakan pembina salinan .

Contoh dengan Pulangan Kovarian Jenis:

class Base
{
public:
  virtual Base* Clone() = 0;
};

class Derivedn : public Base
{
public:
  // Call to copy constructor is implicit
  Derivedn* Clone()
  {
    return new Derivedn(*this);
  }

private:
  Derivedn(const Derivedn&) : ... {}
};
Salin selepas log masuk

Pendekatan ini ringkas dan mematuhi prinsip polimorfisme dalam C . Ia membenarkan penyalinan objek dalam lancar tanpa memerlukan penyalinan ahli eksplisit dalam kaedah Klon().

Atas ialah kandungan terperinci Bagaimana untuk Menyalin Dalam Objek Polimorfik dalam C Apabila Kelas Terbitan Tidak Diketahui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan