Quando uma classe precisa manipular dados de forma independente do tipo, podemos também utilizar o template
para transformar uma classe em genérica como pode ser visto abaixo:
Sintaxe
template<typename T> class nome_classe
{
modificador_acesso:
T atributo;
nome_classe(T par); //construtor
T metodo(T par); //método
}
Onde
template: palavra reservada para declara uma template.
typename: tipo de dado que será passado como argumentos.
T: nome do argumento. Podendo ser qualquer outra letra.
A implementação dos métodos da classe template é feita utilizando o operador (::) seguindo
a sintaxe abaixo:
Sintaxe: construtor
template<typename T> nome_classe<T>::nome_classe(T arg1, T arg2, ...)
Sintaxe: método
template<typename T> nome_classe<T>::nome_metodo(T arg1, T arg2, ...)
Exemplo 2
#include <iostream>
using namespace std;
template <typename T> class MinhaClasse
{
public:
T prop1;
T prop2;
MinhaClasse(T p1, T p2); //construtor "genérico"
T metodo1( T a1, T a2); //método "genérico"
};
//construtor
template <typename T> MinhaClasse<T>::MinhaClasse(T a1, T a2)
{
prop1 = a1;
prop2 = a2;
}
//método
template <typename T> T MinhaClasse<T>::metodo1( T a1, T a2)
{
cout << "prop1:" << prop1 << " prop2:" << prop2 << endl;
cout << "a1:" << a1 << " a2:" << a2 << endl;
return a1*prop1 + a2*prop2;
}
int main()
{
MinhaClasse <int> _classe(2,2);
cout << _classe.metodo1(3,3) << endl;
cout << _classe.metodo1(1.5,1.5);
return 0;
}
Saída
prop1:2 prop2:2
a1:3 a2:3
12
prop1:2 prop2:2
a1:1 a2:1
4