Maison >développement back-end >C++ >Comment copier en profondeur un objet polymorphe en C lorsque la classe dérivée est inconnue ?

Comment copier en profondeur un objet polymorphe en C lorsque la classe dérivée est inconnue ?

DDD
DDDoriginal
2024-12-02 02:28:10658parcourir

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

Copie d'objets polymorphes en C

Question :

En C, comment une profondeur une copie d'une instance d'une classe de base soit créée lorsque la classe dérivée exacte est inconnu ?

Réponse :

Utilisation de la méthode de clonage virtuel

Pour copier efficacement en profondeur un objet polymorphe, l'approche suivante peut être utilisé :

  1. Définir une méthode virtuelle Clone() dans la classe de base Base.
  2. Implémentez la méthode Clone() dans chaque classe dérivée pour créer une nouvelle instance de la classe dérivée correspondante et copiez toutes les données membres nécessaires.

Utilisation du retour covariant Tapez

Cependant, il y a un более "C " approche :

  1. Définissez un constructeur de copie pour chaque classe dérivée.
  2. Remplacez la méthode Clone() dans chaque classe dérivée pour renvoyer une nouvelle instance de la classe dérivée correspondante à l'aide du constructeur de copie .

Exemple avec retour covariant Type :

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&) : ... {}
};

Cette approche est concise et conforme aux principes du polymorphisme en C . Il permet une copie approfondie et transparente des objets sans avoir besoin d'une copie explicite des membres dans la méthode Clone().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn