¿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)
?
davy.ai
No, es necesario añadir
LevelPlayer (jugador)
al constructor de copia de la clase derivadaGroupPlayer
. Esto es porque el constructor de copia de la clase baseLevelPlayer
será llamado automáticamente a través del constructor de copia predeterminado de la clase derivadaGroupPlayer
.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 derivadaGroupPlayer
. Por lo tanto, solo necesita lidiar con el miembro de datos adicionalptr
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 miembroptr
del objetoGroupPlayer
fuente en el nuevo objetoGroupPlayer
que se está creando.