#include <iostream>deve resultar em
// definição de troca...
int main() {
int i = 1, j = 2;
troca(i, j);
std::cout << j << ' ' << i << std::endl;
}
2 1Teste o procedimento usando o programa acima.
1.b) Sobrecarrege o procedimento com uma versão para float e outra para string. Teste-as acrescentando código apropriado à função main().
1.c) Converta as três versões do procedimento por um único modelo (ou template) de procedimento. Teste-o compilando e executando o programa sem alterar a função main(). Depois experimente parametrizar explicitamente o modelo durante a invocação (i.e., troca<int>(i, j) em vez de troca(i, j)). Que forma prefere? Será sempre possível?
1.d) A implementação do modelo de procedimento troca<>() que desenvolveu provavelmente faz uso de uma variável auxiliar. Reescreva-o, se for necessário, de modo a que a definição da variável auxiliar seja separada da atribuição do seu valor *:
T aux;Crie uma classe C que guarde um valor inteiro, não possua construtor por omissão, e se possa escrever num canal de saída. Por exemplo:
aux = ...;
class C {Acrescente à função main() um teste do modelo troca<>(). Experimente compilar. Porque ocorreu o erro? Interprete-o e conclua acerca das restrições impostas pelo modelo implicitamente ao tipo do seu parâmetro.
public:
int i;
C(int ii) : i(ii) {
}
};
std::ostream& operator << (std::ostream& saida, C c) {
return saida << c.i;
}
* Isto não segnifica que se recomende fazê-lo, pelo contrário! As variáveis devem ser inicializadas logo que possível com valores significativos!
2.a) Transforme a classe FilaInt, desenvolvida na Aula 11 do 1º semestre numa classe modelo Fila em que o tipo dos itens guardados na fila é parametrizável. Isto permitir-lhe-á usar filas em que o tipo dos elementos é especificado passando um argumento ao modelo. Por exemplo:
#include <iostream>onde frente() é uma função membro que devolve o item à frente da fila, deve resultar em:// Modelo de classe fila:
int main() {
Fila<double> f;
f.poe(1.1);
f.poe(2.2);
std::cout << f.frente() << endl;
f.tira();
std::cout << f.frente() << endl;
f.tira();
}
1.1Teste o modelo com o programa acima.
2.2
2.b) Altere o modelo de modo a que o número limite de itens nas filas seja parametrizável. Isso deve permitir escrever o seguinte programa:
int main() {2.c) Altere o modelo de modo a que o número limite de itens tenha, por omissão, o valor de 100. Isso deve permitir escrever o seguinte programa:
Fila<double, 10> f; // pilha com máximo de 10 itens float.
f.poe(1.1);
f.poe(2.2);
std::cout << f.frente() << endl;
f.tira();
std::cout << f.frente() << endl;
f.tira();
}
int main() {
Fila<double> f; // pilha com máximo de 100 itens float.
f.poe(1.1);
f.poe(2.2);
std::cout << f.frente() << endl;
f.tira();
std::cout << f.frente() << endl;
f.tira();
}