Cómo aprobar una entrevista de C++: preguntas y respuestas principales

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++: análisis de las mejores preguntas con ejemplos



Una entrevista para un puesto de desarrollador de C++ no solo evalúa la sintaxis, sino también la comprensión profunda de cómo funcionan la memoria, el compilador y la biblioteca estándar. En este artículo, analizaremos las preguntas más frecuentes que se hacen en las entrevistas en 2024-2025. No solo aprenderá las respuestas correctas, sino que también verá ejemplos de código que le ayudarán a superar con confianza una entrevista técnica.



1. Funciones virtuales y polimorfismo



Esto es un clásico. Los entrevistadores quieren asegurarse de que comprende la diferencia entre el enlace estático y dinámico, así como el mecanismo de funcionamiento de la vtable (tabla de funciones virtuales).



Pregunta: ¿Qué sucede si se llama a una función virtual desde un constructor o destructor?



Respuesta: La llamada a una función virtual desde el constructor de una clase base no será polimórfica. En el momento de la llamada al constructor de la clase base, el objeto de la clase derivada aún no se ha creado, por lo que se llamará a la versión de la función de la clase base. De manera similar para el destructor: después de llamar al destructor de la clase derivada, el objeto se "degrada" a la clase base.



#include <iostream>

class Base {public: Base() { print(); } // Llamada a función virtual en el constructor virtual void print() { std::cout << "Base"; } virtual ~Base() = default;};

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

int main() { Derived d; // Salida: Base (desde el constructor de Base) // Derived (desde el constructor de Derived) return 0;}


2. Punteros inteligentes (Smart Pointers)



Ninguna entrevista moderna está completa sin este tema. Los punteros inteligentes son la base de RAII y la gestión de recursos en C++.



Pregunta: ¿Cuál es la diferencia entre std::unique_ptr, std::shared_ptr y std::weak_ptr? ¿Cuándo usar cada uno?



Respuesta:

  • unique_ptr — propiedad exclusiva. No se copia, solo se mueve. Es ideal para recursos que deben liberarse al salir del ámbito.
  • shared_ptr — propiedad compartida. Utiliza un contador de referencias. Elimina el objeto cuando el contador llega a cero.
  • weak_ptr — "observador" para shared_ptr. No incrementa el contador de referencias. Se utiliza para prevenir dependencias cíclicas.


#include <memory>#include <iostream>

class Resource {public: Resource() { std::cout << "Resource acquired"; } ~Resource() { std::cout << "Resource released"; }};

int main() { // unique_ptr std::unique_ptr<Resource> uptr = std::make_unique<Resource>(); // shared_ptr std::shared_ptr<Resource> sptr1 = std::make_shared<Resource>(); std::shared_ptr<Resource> sptr2 = sptr1; // Contador de referencias = 2 // weak_ptr std::weak_ptr<Resource> wptr = sptr1; // No incrementa el contador if (auto locked = wptr.lock()) { std::cout << "Resource is still alive"; } return 0;}


3. Semántica de movimiento (Move semantics) y referencias rvalue



La semántica de movimiento es una de las características clave de C++11. En una entrevista, pueden pedirle que escriba un constructor de movimiento o que explique qué es una forwarding reference.



Pregunta: ¿Qué es la semántica de movimiento y para qué sirve? Dé un ejemplo de cuándo acelera el código.



Respuesta: La semántica de movimiento permite transferir la propiedad de los recursos (por ejemplo, memoria dinámica) sin copiarlos. En lugar de una copia profunda, "movemos" los punteros, poniendo a cero el objeto original. Esto es fundamental para el rendimiento cuando se trabaja con contenedores grandes.

Blogs

Book Recommendations