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)!
- Crie o arquivo
omnitrix.cppna pastasrc/:
#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
- Abra o terminal integrado.
- Compile:
g++ omnitrix.cpp -o omnitrix - 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)