Cómo aprobar una entrevista de C++: preguntas principales de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo aprobar una entrevista de C++: preguntas principales de la A a la Z



La entrevista para un puesto de desarrollador C++ es una prueba no solo del conocimiento de la sintaxis, sino también de la comprensión profunda del funcionamiento del compilador, la gestión de la memoria y las particularidades de la programación orientada a objetos. En este artículo, hemos analizado las preguntas principales de la A a la Z que se hacen con más frecuencia en las entrevistas. El material será útil tanto para desarrolladores junior como para aquellos que se preparan para un nivel middle.



1. Fundamentos de sintaxis y tipos de datos



Empecemos con lo básico: preguntas que evalúan tu comprensión de los conceptos fundamentales de C++.



1.1. ¿Cuál es la diferencia entre una referencia y un puntero?

Esta es una pregunta clásica. Las diferencias principales son:

  • Una referencia no puede ser nullptr, un puntero sí puede.
  • Una referencia no se puede reasignar a otro objeto después de la inicialización.
  • Un puntero admite aritmética, una referencia no.


int a = 5;int& ref = a;  // referenciaint* ptr = &a; // puntero

ref = 10; // a = 10*ptr = 20; // a = 20


1.2. ¿Qué es const y cómo usarlo correctamente?

const en C++ se utiliza para proteger los datos de modificaciones. Es importante distinguir entre const antes del tipo y después de él:

  • const int* ptr — puntero a un entero constante (no se puede cambiar el valor en la dirección).
  • int* const ptr — puntero constante a un entero (no se puede cambiar la dirección).


2. Programación Orientada a Objetos (POO)



Las preguntas sobre POO son una parte obligatoria de la entrevista de C++. Analicemos los temas clave.



2.1. Funciones virtuales y polimorfismo

Las funciones virtuales proporcionan enlace tardío (polimorfismo dinámico). Ejemplo:



class Base {public:    virtual void show() { std::cout << "Base"; }    virtual ~Base() = default;};

class Derived : public Base {public: void show() override { std::cout << "Derived"; }};

int main() { Base* b = new Derived(); b->show(); // Imprime "Derived" delete b;}


Es importante recordar el destructor virtual: sin él, al eliminar un objeto a través de un puntero a la clase base, solo se llamará al destructor de la clase base, lo que provocará una fuga de memoria.



2.2. Funciones virtuales puras y clases abstractas

Una clase que contiene al menos una función virtual pura (= 0) se vuelve abstracta. No se puede crear una instancia de dicha clase, solo un heredero con la implementación de todos los métodos virtuales puros.



2.3. ¿Qué son vtable y vptr?

Para implementar el polimorfismo, el compilador crea una tabla virtual (vtable) para cada clase con funciones virtuales. Cada objeto contiene un puntero oculto (vptr) a esta tabla. La llamada a una función virtual se realiza a través de una indirección mediante vptr, lo que añade una pequeña sobrecarga.



3. Gestión de memoria y punteros inteligentes



C++ proporciona al desarrollador un control total sobre la memoria, lo que requiere especial cuidado.



3.1. Diferencia entre new/delete y malloc/free

  • malloc asigna memoria, pero no llama al constructor. free libera memoria sin llamar al destructor.
  • new asigna memoria y llama al constructor. delete llama al destructor y libera la memoria.


3.2. Punteros inteligentes: unique_ptr, shared_ptr, weak_ptr

Los punteros inteligentes gestionan automáticamente el tiempo de vida de un objeto. Puntos clave:

  • std::unique_ptr — propiedad exclusiva, no se puede copiar, solo mover.
  • std::shared_ptr — propiedad compartida mediante un contador de referencias.
  • std::weak_ptr — no incrementa el contador de referencias, y

Blogs

Book Recommendations