Pular para conteúdo

Glossário

Classe abstrata — classe com pelo menos um método virtual puro (= 0); não pode ser instanciada diretamente, funciona como uma interface/contrato para as classes filhas. Capítulo 11.

Const correctness — prática de marcar const tudo que não deveria (ou não precisa) mudar: parâmetros (const T&), métodos que só leem (metodo() const), variáveis que não são reatribuídas. O compilador então garante essas promessas. Capítulos 1, 2, 3, 8.

Debounce — técnica para ignorar transições elétricas espúrias de um botão físico (ruído de contato), garantindo que um clique seja lido como um único evento. Capítulo 14.

Destrutor — método especial (~NomeDaClasse()), chamado automaticamente quando um objeto sai de escopo ou é destruído com delete; libera qualquer recurso adquirido pelo objeto. Capítulo 10.

Encapsulamento — esconder os campos de uma classe (private) e expor só métodos que garantem as regras do domínio (o invariante), em vez de deixar qualquer código externo alterar os dados livremente. Capítulo 9.

Erase-remove — o idioma para remover de um vector todos os elementos que satisfazem um critério: v.erase(std::remove_if(v.begin(), v.end(), criterio), v.end()). remove_if sozinho não encolhe o vector — só arruma os que ficam na frente e devolve o novo fim; quem apaga é o erase. Capítulo 8.

Getter / setter — método que lê (getter) ou altera com validação (setter) um campo privado. Capítulo 9.

Herança — mecanismo pelo qual uma classe (filha) reaproveita campos e métodos de outra (base/pai), podendo sobrescrever comportamento. Sem virtual, não é polimórfica de verdade. Capítulo 11.

Histerese — margem entre o limite de "ligar" e o limite de "desligar" num sistema de controle, para evitar oscilação rápida perto do limiar. Capítulo 15.

Include guard — o padrão #ifndef/#define/#endif (ou #pragma once) que evita que o conteúdo de um .h seja processado mais de uma vez no mesmo arquivo final, prevenindo declaração duplicada. Capítulo 12.

Invariante — uma regra que precisa ser sempre verdadeira para um objeto de uma classe (ex.: "saldo nunca é negativo"). É o que o encapsulamento protege. Capítulo 9.

Lambda — função anônima definida no lugar onde é usada ([captura](parâmetros) { corpo }), o equivalente moderno a passar um ponteiro de função. Capítulo 8.

Ligação estática / dinâmica (static/dynamic binding) — sem virtual, o compilador decide em tempo de compilação qual método chamar, baseado no tipo da referência (ligação estática). Com virtual, a decisão é em tempo de execução, baseada no tipo real do objeto (ligação dinâmica) — isso é polimorfismo. Capítulo 11.

Object slicing — quando um objeto de uma classe filha é copiado para uma variável/container do tipo da classe base por valor, perdendo a parte específica da filha. Corrigido guardando ponteiros (unique_ptr) em vez de valores. Capítulo 11.

Override — palavra-chave que confirma "este método sobrescreve um virtual da classe base"; se não sobrescrever nada de verdade, o compilador acusa erro (proteção contra erro de digitação/assinatura). Capítulo 11.

Polimorfismo — o mesmo código (objeto.metodo()) se comportando de forma diferente dependendo do tipo real do objeto por trás de uma referência/ponteiro da classe base. Exige virtual. Capítulo 11.

RAII (Resource Acquisition Is Initialization) — o recurso (memória, arquivo, etc.) é adquirido no construtor e liberado no destrutor; o ciclo de vida do recurso fica amarrado ao ciclo de vida do objeto. Capítulo 10.

Regra do zero — recomendação de nunca gerenciar recurso bruto diretamente numa classe; delegar para tipos que já fazem RAII (vector, string, unique_ptr), e não escrever destrutor/construtor de cópia algum — o compilador gera a versão correta sozinho. Capítulo 10.

Regra dos 3 — se uma classe precisa de destrutor customizado, ela também precisa de construtor de cópia e operador de atribuição de cópia customizados (os três resolvem juntos o problema da cópia rasa). Capítulo 10.

RTTI (Run-Time Type Information) — mecanismo do C++ para checar/converter tipos em tempo de execução (dynamic_cast, typeid); frequentemente desabilitado em builds embarcados para economizar memória. Capítulo 14.

Sobrecarga (overload) — múltiplas funções/métodos/construtores com o mesmo nome, mas parâmetros diferentes; o compilador escolhe a versão certa pela chamada. Capítulos 2, 8.

Sobrecarga de operadores — definir o que ==, +, <<, etc. fazem para um tipo próprio, permitindo sintaxe natural (objeto1 == objeto2). Capítulo 11.

static_cast — conversão explícita de tipo em C++ (static_cast<int>(x)), no lugar do cast de C ((int) x). O nome longo é proposital: torna toda conversão do programa procurável, e o compilador recusa conversões que não fazem sentido em vez de obedecer calado. Capítulo 4.

std::size_t — tipo inteiro sem sinal usado para tamanhos e índices; é o que .size() devolve em vector, string e nos demais containers. Por não ter sinal, nunca fica negativo: v.size() - 1 num container vazio dá o maior número possível, e não -1. É o mesmo size_t de C (strlen, sizeof), com o prefixo std::. Capítulo 4.

std::optional — tipo que representa "ou tem um valor, ou não tem nada", sem usar um valor sentinela do próprio domínio (que pode colidir com um dado legítimo). Não é assunto deste curso; veja Próximos passos. O curso resolve o mesmo problema com -1 (quando nenhum índice é negativo) ou com bool de retorno mais parâmetro por referência — capítulo 3.

std::unique_ptr — ponteiro inteligente com RAII: dá delete automaticamente quando sai de escopo, e não pode ser copiado (só um dono por vez), evitando double free. Capítulo 10.

Vazamento de memória (memory leak) — memória alocada com new que nunca é liberada com delete correspondente; acumula ao longo do tempo até esgotar a memória disponível. Capítulos 9, 12.