Como passar em uma entrevista de C++: principais perguntas de A a Z
A entrevista para a posição de desenvolvedor C++ é um teste não apenas do conhecimento de sintaxe, mas também da compreensão profunda do funcionamento do compilador, gerenciamento de memória e particularidades da programação orientada a objetos. Neste artigo, analisamos as principais perguntas de A a Z que são mais frequentemente feitas em entrevistas. O material será útil tanto para desenvolvedores juniores quanto para aqueles que se preparam para o nível pleno.
1. Fundamentos de sintaxe e tipos de dados
Começaremos pela base — perguntas que testam sua compreensão dos conceitos fundamentais do C++.
1.1. Qual a diferença entre referência e ponteiro?
Esta é uma pergunta clássica. As principais diferenças:
- Uma referência não pode ser
nullptr, um ponteiro pode. - Uma referência não pode ser religada a outro objeto após a inicialização.
- Ponteiros suportam aritmética, referências não.
int a = 5;int& ref = a; // referênciaint* ptr = &a; // ponteiro
ref = 10; // a = 10*ptr = 20; // a = 201.2. O que é const e como usá-lo corretamente?
const em C++ é usado para proteger dados contra modificação. É importante distinguir const antes do tipo e depois dele:
const int* ptr— ponteiro para um inteiro constante (não é possível alterar o valor no endereço).int* const ptr— ponteiro constante para um inteiro (não é possível alterar o endereço).
2. Programação Orientada a Objetos (POO)
Perguntas sobre POO são uma parte obrigatória da entrevista de C++. Vamos analisar os tópicos-chave.
2.1. Funções virtuais e polimorfismo
Funções virtuais fornecem ligação tardia (polimorfismo dinâmico). Exemplo:
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;}É importante lembrar do destrutor virtual — sem ele, ao deletar um objeto através de um ponteiro para a classe base, apenas o destrutor da classe base será chamado, o que levará a um vazamento de memória.
2.2. Funções virtualmente puras e classes abstratas
Uma classe que contém pelo menos uma função virtual pura (= 0) torna-se abstrata. Não é possível criar uma instância de tal classe — apenas uma classe derivada com a implementação de todos os métodos virtualmente puros.
2.3. O que são vtable e vptr?
Para implementar o polimorfismo, o compilador cria uma tabela virtual (vtable) para cada classe com funções virtuais. Cada objeto contém um ponteiro oculto (vptr) para esta tabela. A chamada de uma função virtual ocorre através de uma referência indireta via vptr, o que adiciona uma pequena sobrecarga.
3. Gerenciamento de memória e smart pointers
C++ fornece ao desenvolvedor controle total sobre a memória, o que requer cuidado especial.
3.1. Diferença entre new/delete e malloc/free
mallocaloca memória, mas não chama o construtor.freelibera memória sem chamar o destrutor.newaloca memória e chama o construtor.deletechama o destrutor e libera a memória.
3.2. Smart pointers: unique_ptr, shared_ptr, weak_ptr
Smart pointers gerenciam automaticamente o tempo de vida de um objeto. Pontos-chave:
std::unique_ptr— posse exclusiva, não pode ser copiado, apenas movido.std::shared_ptr— posse compartilhada através de contagem de referências.std::weak_ptr— não incrementa a contagem de referências, e