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.

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
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código:

    1. En el constructor, la línea *name = new char[]; es incorrecta. Debe ser name = new char[]; o name = new char[SIZE]; donde SIZE es el tamaño del arreglo.
    2. 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 puntero name en lugar de copiar los caracteres reales. La forma correcta de copiar los caracteres es utilizar las funciones strcpy o strncpy. Además, es importante asignar memoria para el nuevo puntero name antes de copiar los caracteres.

    3. El código no tiene un constructor parametrizado para inicializar id y name.

    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.

Comments are closed.