21 perguntas e respostas de entrevistas em C++ mais lidas [para calouros]

Publicados: 2020-12-17

Ainda hoje, o C++ é tão popular quanto nos anos 80. Essa linguagem de programação de propósito geral, compilada e multiparadigma (orientada a objetos, procedural e funcional) desempenha um papel crucial no setor de TI, particularmente no desenvolvimento de software.

Desenvolvedores em todo o mundo usam C++ para construir software de sistemas, software de banco de dados, software incorporado, aplicativos corporativos, aplicativos baseados em GUI, compiladores, computação e gráficos avançados, sistemas operacionais, navegadores, jogos, sistemas em nuvem etc. linguagem de programação.

Neste post, criamos uma lista de 21 perguntas de entrevista em C++ que você deve saber se deseja construir uma carreira em desenvolvimento de software. Essas perguntas e respostas da entrevista em C++ ajudarão você a quebrar o gelo sobre o assunto!

Perguntas e respostas da entrevista em C++

  1. Defina “Classe” e “Objeto”.

Em C++, uma classe é um tipo de dados definido pelo usuário que reflete diferentes entidades, ações e recursos. Uma classe contém os membros de dados junto com suas funções. O acesso a esses membros e funções de dados é definido por três modificadores – privado, público e protegido. Enquanto as classes definem um tipo de dados, elas apenas especificam a estrutura de dados em vez de definir os dados.

Um objeto é uma instância de uma classe. É uma entidade de tempo de execução que pode representar uma pessoa, um lugar ou uma coisa.

Objetos operam em membros de dados e funções de membro. Ele contém campos, métodos e construtores. Por exemplo, enquanto um carro é um objeto, seus vários recursos, como rodas, design, cor, suportes, etc., são instâncias de sua classe.

  1. O que é um "Especificador de Acesso?"

Um especificador de acesso determina como os membros de uma classe (funções e variáveis) podem ser acessados ​​fora do escopo da classe. C++ tem três tipos de especificadores de acesso

  • Private – Um especificador privado significa que os membros da classe só podem ser acessados ​​dentro da mesma classe em que foram declarados. Nesse caso, as classes filhas não podem acessar membros privados da classe pai.
  • Protected – Um especificador protected permite que classes filhas acessem os membros de dados protegidos da classe pai.
  • Public – Os membros de classe que são declarados “públicos” podem ser acessados ​​em um código C++.
  1. O que é um especificador de classe de armazenamento mutável?

Um especificador de classe de armazenamento mutável se aplica apenas a variáveis ​​de membro não estáticas e não constantes de uma classe para alterar o membro do objeto de classe constante declarando-o.

  1. O que é Encapsulamento?

Encapsulamento refere-se ao encapsulamento ou associação de membros de dados e suas funções dentro de uma classe. Esse processo é feito por motivos de segurança, pois restringe o acesso de qualquer método externo. Se o membro de dados for privado, somente sua função de membro poderá acessar os dados.

  1. O que é Abstração?

A abstração é um processo de ocultar implementações internas e exibir apenas os detalhes essenciais. O acesso a membros de dados e funções depende do modificador que está sendo usado. Portanto, se uma palavra-chave pública for usada para definir os membros, eles poderão ser acessados ​​por qualquer pessoa. No entanto, se uma palavra-chave privada definir os membros, você não poderá acessá-los por meio de métodos externos.

  1. O que é um namespace?

Um namespace facilita a divisão lógica de um código. Ele é usado em programas C++ para prevenir/resolver o conflito de nomenclatura de identificadores atribuindo diferentes namespaces a eles. Um namespace define o escopo onde um identificador (variáveis, classe e funções) é declarado. Assim, o principal objetivo de usar um namespace é eliminar a ambiguidade do código.

  1. Defina "polimorfismo". Quantos tipos de polimorfismo existem em C++?

Literalmente, polimorfismo significa a presença de múltiplas formas. Em C++, o polimorfismo ocorre quando mais de uma função existe com o mesmo nome, mas com funcionalidades variadas.

O polimorfismo é de dois tipos:

  • O polimorfismo dinâmico, também conhecido como “substituição” em C++, ajuda a determinar qual método de função deve ser executado em tempo de execução em vez de tempo de compilação. A substituição de função é uma excelente instância de polimorfismo dinâmico. Na substituição de função, a classe filha contém o método que já existe na classe pai. Consequentemente, a classe filha substitui o método da classe pai. Nesse caso, as classes pai e filha mantêm a mesma função com definições diferentes.
  • O polimorfismo estático é implementado no momento da compilação do código (portanto, também é conhecido como polimorfismo em tempo de compilação). A sobrecarga de métodos é um exemplo perfeito de polimorfismo estático. A sobrecarga de métodos permite a presença de mais de uma função com o mesmo nome, mas com funcionalidades diferentes.
  1. Explique o propósito da palavra-chave “Volátil”.

A função “volátil” é usada para declarar que uma determinada variável é volátil. Isso direciona o compilador para alterar a variável externamente, evitando assim a otimização do compilador na referência da variável.

Leia: Perguntas e respostas da entrevista sobre Java

  1. O que é uma função Inline?

Qualquer função que tenha a palavra-chave “inline” como seu prefixo antes da definição da função é uma função inline. Eles são usados ​​principalmente para reduzir a sobrecarga de chamada de função. Quando uma função inline é chamada, todo o código será inserido ou substituído no ponto específico da chamada da função inline. Como o compilador trata as funções inline como macros, elas são executadas muito mais rapidamente. Assim, declarar pequenas funções embutidas ajuda a aumentar a eficiência do código.

A sintaxe padrão de uma função inline é:

Nome da função do tipo de retorno embutido (parâmetros)

{

// O código da função vai aqui

}

  1. O que é “este” ponteiro?

Em C++, o ponteiro “this” é um ponteiro constante que contém o endereço de memória do objeto atual. Ele é passado como um argumento oculto para todas as chamadas de função membro não estáticas. Além disso, esse ponteiro existe uma variável local dentro do corpo de todas as funções não estáticas.

Leia : Perguntas e respostas da entrevista SQL

  1. O C++ tem um tipo de dados primitivo de string?

C++ não pode ter um tipo de dados primitivo de string, mas sim uma classe da Standard Template Library (STL).

  1. Qual é a função do operador de resolução de escopo?

O operador de resolução de escopo serve a dois propósitos:

  • Ele ajuda a resolver o escopo de variáveis ​​globais.
  • Quando uma função é definida fora de uma classe, o operador de resolução de escopo associa essa função à classe.
  1. O que é um destruidor?

A função membro de uma classe é chamada de destruidor. Seu nome é o mesmo do nome da classe, mas com um símbolo de til (~) como prefixo. Sempre que um objeto perde seu escopo, os destruidores são executados automaticamente.

  1. Explique a diferença entre classe de palavra-chave e estrutura de palavra-chave.

A palavra-chave class representa membros privados por padrão, enquanto a palavra-chave struct se assemelha a membros públicos por padrão.

  1. Defina uma função virtual pura.

Uma função virtual pura é aquela que não contém nenhuma definição. Você só precisa declarar a função virtual pura atribuindo 0 na declaração. Classes abstratas em C++ têm pelo menos uma função virtual pura.

A sintaxe padrão de uma função virtual pura é:

virtual void abc()=0; //função virtual pura.

Confira: 15 dicas de entrevista para se destacar em sua entrevista de emprego

  1. Qual é o propósito de um modelo de classe?

Um modelo de classe é usado para criar uma família de classes e funções. Por exemplo, você pode criar um modelo de uma classe de array que permitirá criar um array incluindo vários tipos (int, float, etc.). Você também pode criar um modelo para uma função. Portanto, se houver uma função add(), você poderá criar várias versões de add().

  1. O que significa "Erro de estouro"?

O erro de estouro é um erro aritmético que ocorre quando a saída de um cálculo matemático é maior que o espaço real alocado pelo sistema.

  1. Como delete e delete[ ] são diferentes?

A função delete libera uma única unidade de memória alocada usando o operador “new”, enquanto delete[ ] libera a matriz de memória alocada pelo operador new[ ].

  1. Qual é o propósito de vTable e vptr em C++? Como o compilador os trata?

Em C++, uma vTable contém ponteiros de função. Por outro lado, vptr é um ponteiro atribuído à vTable. Enquanto cada classe tem uma vTable, cada objeto tem um vptr. O compilador C++ adiciona código adicional em dois lugares para usar e manter efetivamente vTable e vptr:

Em cada construtor para definir o vptr do objeto que está sendo criado e apontar para a vTable de uma classe.

No código tendo uma chamada de função polimórfica. O compilador insere o código em cada local onde uma chamada polimórfica é declarada para procurar o vptr usando o ponteiro/referência da classe base. Uma vez que o vptr é obtido, você pode acessar a vTable da classe derivada. Você pode usar a vTable para acessar e chamar a função de classe derivada show().

  1. Em C++, onde uma variável automática é armazenada?

Todas as variáveis ​​locais são variáveis ​​automáticas por padrão e são armazenadas na memória da pilha.

  1. Como você pode exportar uma função de uma DLL?

Existem duas maneiras de exportar uma função de uma DLL:

  • Você pode usar a biblioteca de tipos do DLL.
  • Você pode consultar a função da instância de DLL.

Inscreva-se em cursos de engenharia de software das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Conclusão

Essas perguntas e respostas em C++ são algumas das perguntas mais comuns em entrevistas de emprego. Embora tenhamos listado apenas algumas perguntas, isso deve lhe dar uma boa ideia de como se preparar para uma entrevista em C++.

Se você estiver interessado em aprender mais sobre desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

Torne-se um Desenvolvedor Full Stack

Inscreva-se agora para Mestrado em Engenharia de Software