es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedes ayudarme con el constructor de copia para la clase derivada?

Tengo esta clase base:

class LevelPlayer
{
protected:
int level;
int id;
public:
LevelPlayer():id(-1){}
LevelPlayer(int level,int id):level(level),id(id){}
virtual ~LevelPlayer()=default;
LevelPlayer(const LevelPlayer&)=default;
LevelPlayer& operator=(const LevelPlayer&)=default;
};

y esta clase derivada:

class GroupPlayer: public LevelPlayer
{
private:
IdPlayer* ptr;
public:
GroupPlayer():LevelPlayer(),ptr(nullptr){}
GroupPlayer(int level,int id,IdPlayer* ptr):LevelPlayer(level,id),ptr(new IdPlayer(ptr)){}
~GroupPlayer()override=default;
GroupPlayer(const GroupPlayer&);
GroupPlayer& operator=(const GroupPlayer&);
};

y para el constructor de copia de la clase derivada, escribí esto:

GroupPlayer::GroupPlayer(const GroupPlayer& player):ptr(new IdPlayer(
(player.ptr))){}

pero no estoy seguro si es correcto… ¿debería también agregar LevelPlayer(player) ?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    No, es necesario añadir LevelPlayer (jugador) al constructor de copia de la clase derivada GroupPlayer. Esto es porque el constructor de copia de la clase base LevelPlayer será llamado automáticamente a través del constructor de copia predeterminado de la clase derivada GroupPlayer.

    En otras palabras, dado que el constructor de copia de la clase base ya está implementado como LevelPlayer (const LevelPlayer & amp;)= default;, se llamará y ejecutará automáticamente al copiar un objeto de la clase derivada GroupPlayer. Por lo tanto, solo necesita lidiar con el miembro de datos adicional ptr que pertenece a la clase derivada en su constructor de copia.

    Por lo tanto, su implementación del constructor de copia para GroupPlayer parece ser correcta ya que copia el miembro ptr del objeto GroupPlayer fuente en el nuevo objeto GroupPlayer que se está creando.

Comments are closed.