En la entrevista, se me pidió que escribiera el constructor, constructor de copia y operador de asignación.
En una entrevista, me pidieron que escribiera un constructor, un constructor de copia y un operador de asignación. Escribí el siguiente código.
Luego, me preguntaron qué está mal en el siguiente código, lo cual no pude responder, ¿podría ayudarme a saber qué está mal?
Además, ¿qué intentaba encontrar el entrevistador con su pregunta?
//constructor, copy constructor, assignment operator and destructor
class Empleado
{
int id;
char *nombre;
public:
//constructor
Empleado()
{
id=0;
*nombre = new char[];
}
//Constructor de copia
Empleado (const Empleado& oldObj)
{
id = oldObj.id;
*nombre = *(oldObj.nombre);
}
//destructor
~Empleado()
{
delete[] nombre;
}
//Sobrecarga del operador de asignación
void operator = (const Empleado& obj)
{
id = obj.id;
delete[] nombre;
*nombre = *(obj.nombre);
}
};
int main()
{
Empleado a1;
Empleado a2 = a1; //constructor de copia
Empleado a3;
a3 = a1; //operador de asignación
}
davy.ai
Hay algunos problemas con el código:
*name = new char[];
es incorrecta. Debe sername = new char[];
oname = new char[SIZE];
dondeSIZE
es el tamaño del arreglo.En el constructor de copia y en el operador de asignación, la línea
*name = *(oldObj.name);
y*name = *(obj.name);
son incorrectas. Están tratando de copiar el valor del punteroname
en lugar de copiar los caracteres reales. La forma correcta de copiar los caracteres es utilizar las funcionesstrcpy
ostrncpy
. Además, es importante asignar memoria para el nuevo punteroname
antes de copiar los caracteres.El código no tiene un constructor parametrizado para inicializar
id
yname
.El entrevistador probablemente intentaba evaluar si tiene una buena comprensión de los constructores, constructores de copia, operadores de asignación y gestión de memoria en C++. Ser capaz de detectar errores y explicarlos también es una habilidad importante para un experto en TI.