Herança e polimorfismo

Substituição, acesso, construção, funções virtuais, classes abstratas, slicing e destrutores virtuais.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Referência ou cópia?

Promocao promocao(100.0, 0.25);
const Produto& referencia = promocao;  // total() = 75
Produto copia = promocao;              // total() = 100, só a base
  • Tipo estático vem da declaração. Tipo dinâmico é o objeto concreto.
  • Virtual por referência ou apontador escolhe pelo tipo dinâmico.
  • Copiar para a base faz slicing. O virtual não recupera a parte cortada.
  • vector<Produto> guarda bases. Para polimorfismo, usa referências ou vector<unique_ptr<Forma>>.

Herança pública exige respeitar o contrato da base. Código comum não basta. Uma relação tem-um usa composição.

Assinaturas e destruição

class Forma {
public:
    virtual ~Forma() = default;
    virtual double area() const = 0;  // pura, classe abstrata
};
  • override manda o compilador conferir. double area() não substitui double area() const.
  • Chamada qualificada obj.Base::f() escolhe a base.
  • Em construção e destruição, o despacho não alcança a parte ainda não construída ou já destruída.
  • Destruir derivada por Base* exige destrutor virtual. Vale para unique_ptr<Base>.

A construção segue base, membros por declaração e corpo. A destruição corre o corpo do destrutor e depois destrói membros e bases pela ordem inversa. Exemplo de áreas: 3x4 mais quadrado 5 dá 12 + 25 = 37.

Formas completas.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.