Heim > Backend-Entwicklung > C++ > Wie kann ich ein polymorphes Objekt in C tief kopieren, wenn die abgeleitete Klasse unbekannt ist?

Wie kann ich ein polymorphes Objekt in C tief kopieren, wenn die abgeleitete Klasse unbekannt ist?

DDD
Freigeben: 2024-12-02 02:28:10
Original
658 Leute haben es durchsucht

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

Polymorphes Objektkopieren in C

Frage:

Wie kann in C eine tiefe Eine Kopie einer Instanz einer Basisklasse wird erstellt, wenn die genaue abgeleitete Klasse vorhanden ist unbekannt?

Antwort:

Verwendung der Virtual-Clone-Methode

Um ein polymorphes Objekt effektiv tief zu kopieren, kann der folgende Ansatz verwendet werden verwendet werden:

  1. Definieren Sie eine virtuelle Clone()-Methode in der Basisklasse Basis.
  2. Implementieren Sie die Clone()-Methode in jeder abgeleiteten Klasse, um eine neue Instanz der entsprechenden abgeleiteten Klasse zu erstellen und alle erforderlichen Datenelemente zu kopieren.

Verwenden Sie die kovariante Rückgabe Typ

Allerdings gibt es ein zusätzliches „C“ Ansatz:

  1. Definieren Sie einen Kopierkonstruktor für jede abgeleitete Klasse.
  2. Überschreiben Sie die Clone()-Methode in jeder abgeleiteten Klasse, um mithilfe des Kopierkonstruktors eine neue Instanz der entsprechenden abgeleiteten Klasse zurückzugeben .

Beispiel mit kovarianter Rendite Typ:

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&) : ... {}
};
Nach dem Login kopieren

Dieser Ansatz ist prägnant und entspricht den Prinzipien des Polymorphismus in C. Es ermöglicht ein nahtloses tiefes Kopieren von Objekten, ohne dass ein explizites Kopieren von Mitgliedern in der Clone()-Methode erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie kann ich ein polymorphes Objekt in C tief kopieren, wenn die abgeleitete Klasse unbekannt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage