Capítulo 17: Templates (Templates de Função) ⌚👽

Neste capítulo, vamos aprender a criar funções genéricas que funcionam com qualquer tipo de dado usando os Templates, com o tema Ben 10!


📖 O que são Templates?

Imagine o Omnitrix do Ben 10: ele é um único dispositivo que pode se transformar em qualquer alienígena. Um Template em C++ funciona de forma parecida! Ele permite criar uma função ou classe que funciona com qualquer tipo de dado (int, float, string, etc.) sem que precisemos reescrever o código para cada tipo.


📖 Exemplo Guiado: O Omnitrix Genérico

Vamos criar uma função template que exibe o poder de um alienígena. O poder pode ser um número inteiro, um número quebrado (float) ou um texto (string)!

  1. Crie o arquivo omnitrix.cpp na pasta src/:
#include <iostream>
#include <string>
 
using namespace std;
 
// Definindo um Template de Função
// O 'T' é um tipo genérico que será substituído na hora do uso!
template <typename T>
void exibir_poder(string nome_alien, T poder) {
    cout << "Alien: " << nome_alien << " | Poder: " << poder << endl;
}
 
int main() {
    cout << "--- Omnitrix Ativado ---" << endl;
 
    // Usando com Inteiro
    exibir_poder("Quatro Bracos", 100);
 
    // Usando com Float
    exibir_poder("Chama", 95.5f);
 
    // Usando com String
    exibir_poder("XLR8", "Velocidade da Luz");
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: g++ omnitrix.cpp -o omnitrix
  3. Execute: ./omnitrix

Resultado Esperado:

--- Omnitrix Ativado ---
Alien: Quatro Bracos | Poder: 100
Alien: Chama | Poder: 95.5
Alien: XLR8 | Poder: Velocidade da Luz

📊 Ilustração Visual: Funcionamento do Template

O compilador gera a função correta para cada tipo usado:

graph TD
    A["Template: exibir_poder(T poder)"] -->|"Se usar int"| B["Função gerada: exibir_poder(int poder)"]
    A -->|"Se usar string"| C["Função gerada: exibir_poder(string poder)"]

🛠️ Prática Obrigatória 1: Maior Valor (Max)

Crie uma função template chamada maior(T a, T b) que retorne o maior entre dois valores de qualquer tipo. Teste passando dois inteiros e depois dois floats!


🔑 Gabarito de Código

Prática 1: maior_valor.cpp

#include <iostream>
 
using namespace std;
 
template <typename T>
T maior(T a, T b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}
 
int main() {
    cout << "Maior inteiro: " << maior(10, 20) << endl;
    cout << "Maior float: " << maior(15.5, 7.2) << endl;
 
    return 0;
}

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo