Please enable JavaScript.
Coggle requires JavaScript to display documents.
C++ MM8 - Coggle Diagram
C++ MM8
TEMPLATES
Templates de Função e Classe
Generalização de código
Tipos parametrizados
Exemplo:
template <typename T>
Definição de Templates
Sintaxe:
template <class T>
T func(T a, T b);
Classe
template <class T>
class MyClass {};
Instanciação
Ocorre quando o template é usado
Compilador gera código específico
Pode ser:
implícita
explícita
Parâmetros de Template
Tipos (typename T)
Valores:
template <int N>
Argumentos de Template
Valores passados na utilização:
func<int>(a, b);
Podem ser deduzidos automaticamente
Especialização
Customização para tipos específicos
Exemplo:
template<>class MyClass<int> {};
Permite comportamento diferente
Argumentos Padrão
Valores default:
template <class T = int>
Simplifica uso
Instanciação Explícita
Força geração de código:
template class MyClass<double>;
Usado para controle de compilação
ABSTRACT CLASSES
Métodos Virtuais Puros
Sintaxe: virtual void f() = 0;
Sem implementação na base
Obrigam derivadas a implementar
Classes Abstratas vs Concretas
Abstrata
contém pelo menos um método puro
não pode ser instanciada
Concreta
todos métodos implementados
pode ser instanciada
Ponteiros e Referências para Classes Abstratas
Permitido:
Base* ptr;
Base& ref;
Uso:
manipular objetos derivados
base para polimorfismo
Não é possível:
criar objetos diretamente
Atribuição Virtual (Virtual Assignment)
Problema:
assignment não é virtual por padrão
Pode causar inconsistência em hierarquias
Solução:
definir método virtual para cópia (ex: clone)
Listas Heterogêneas
Lista com objetos de tipos diferentes
Uso de:
ponteiros para classe base
Permite:
armazenar diferentes derivados
Implementação
Estrutura:
classe base abstrata
nós contendo ponteiros base
Operações:
inserção
remoção
acesso polimórfico
POLIMORFISMO
Conceito
Um mesmo nome -> comportamentos diferentes
Baseado em herança
Permite tratar objetos derivados como base
Tipos:
early binding (estático)
late binding (dinâmico -> virtual)
Métodos Virtuais
Declarados com virtual
Permitem binding dinâmico
Resolução em tempo de execução
Chamados via:
ponteiros (Base*)
referências (Base&)
Permitem sobrescrita na derivada
Destruição de Objetos Dinâmicos
Necessário destrutor virtual na classe base
Evita comportamento incorreto ao usar:
Base* ptr = new Derived;
delete ptr;
Garante:
destrutor da derivada
depois destrutor da base
Virtual Method Table (VTable)
Estrutura interna do compilador
Armazena ponteiros para métodos virtuais
Cada classe com métodos virtuais -> possui VTable
Objeto contém ponteiro oculto -> vptr
Permite:
seleção dinâmica do método correto
Dynamic Casts
dynamic_cast
Conversão segura em hierarquias
Usado para:
Base -> Derived
Requisitos:
classe com pelo menos um método virtual
Comportamento:
retorna nullptr (ponteiros)
lança exceção (referências)