0Pricing
C++ Academy · Aula

Modelos de funções e classes: revisão

Escreva funções e classes genéricas com a sintaxe correta de modelos

Modelos de funções e classes: revisão é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Por que usar modelos

Os modelos permitem escrever o código uma vez e fazer com que o compilador gere versões específicas para cada tipo utilizado. São a base da programação genérica.

Sintaxe de modelo de função

Declare parâmetros de tipo com template <typename T>. Use T na assinatura da função.

template <typename T>
T max_of(T a, T b) {
    return (a > b) ? a : b;
}

std::cout << max_of(3, 7);          // int
std::cout << max_of(2.5, 1.5);      // double

typename versus class

As palavras-chave typename e class são intercambiáveis nas declarações de parâmetros de modelos. typename é mais comum no estilo moderno.

Vários parâmetros de tipo

Os modelos podem ter vários parâmetros de tipo.

template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
    return a + b;
}

Parâmetros que não são tipos

Os parâmetros de modelos também podem ser valores que não são tipos: inteiros, enumerações e ponteiros.

template <typename T, size_t N>
struct StaticArray {
    T data[N];
};

StaticArray<int, 10> arr;

Modelos de classe

As classes genéricas usam a mesma sintaxe de modelos. Use o parâmetro de tipo para membros e métodos.

template <typename T>
class Stack {
    std::vector<T> data_;
public:
    void push(T x) { data_.push_back(std::move(x)); }
    T pop()        { T t = std::move(data_.back()); data_.pop_back(); return t; }
};

Stack<int> s1;
Stack<std::string> s2;

Funções-membro fora da classe

As definições fora da classe precisam do prefixo de modelo em cada membro.

template <typename T>
class Stack {
public:
    void push(T x);
};

template <typename T>
void Stack<T>::push(T x) {
    data_.push_back(std::move(x));
}

Argumentos padrão de modelos

Assim como os argumentos padrão de funções. São usados quando o chamador não especifica um valor.

template <typename T = int>
class Box {
    T value;
};

Box<> b;       // T is int

Dedução de argumentos de modelos

O compilador costuma deduzir os argumentos de modelos a partir da chamada.

template <typename T>
void print(T x) { std::cout << x; }

print(42);          // T deduced as int
print("hello");    // T deduced as const char*
print<double>(3);   // explicit

Dedução de argumentos de modelos de classe (C++17)

O C++17 permite omitir os argumentos do modelo de classe quando eles podem ser deduzidos do construtor.

std::pair p(1, 2.5);            // pair<int, double>
std::vector v{1, 2, 3};         // vector<int>

Pesquisa em duas fases

Os modelos passam por pesquisa em duas fases — na definição (nomes não dependentes) e na instanciação (nomes dependentes). Isso detecta muitos erros no momento da definição.

Mensagens de erro

Os erros de modelos podem ser intimidantes. Leia de baixo para cima, concentre-se no local de origem e use conceitos do C++20 para melhorar os diagnósticos.

Verificação rápida

Qual recurso permite que std::vector v{1, 2, 3}; seja compilado sem especificar std::vector<int>?

Recapitulação

Os modelos geram código específico para cada tipo durante a compilação. Defina modelos de função e de classe com template <typename T>. O compilador deduz os argumentos quando possível — especifique-os explicitamente quando necessário.

Perguntas Frequentes

A aula “Modelos de funções e classes: revisão” é grátis?

Sim — o texto completo de “Modelos de funções e classes: revisão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Modelos de funções e classes: revisão”?

Escreva funções e classes genéricas com a sintaxe correta de modelos Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Modelos de funções e classes: revisão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Modelos de funções e classes: revisão
  2. Especialização parcial e total de modelos
  3. Modelos variádicos e pacotes de parâmetros
  4. Funções constexpr e if constexpr
← Voltar para C++ Academy