O objetivo da atividade consiste em praticar os conceitos relacionados com orientação a objetos, em especial, polimorfismo paramétrico. Procure realizar o exercício abaixo investigando a forma de funcionamento deste tipo de polimorfismo na linguagem de programação escolhida. Segue uma lista de linguagens de programação que tem suporte para polimorfismo paramétrico:
- Scala
- Java
- C#
- Delphi
- C++
O compilador g++
compila programas em C++, basta que a extensão do
arquivo seja ou cc
ou cpp
. Para compilar o arquivo ./main.cc abra um
terminal no Linux e digite:
g++ main.cc -o main
./main
Para compilar separadamente um módulo (um arquivo ./troca.cc por exemplo), basta lançar:
g++ troca.cc -c # gera o arquivo objeto relocável troca.o
g++ main.cc -c # gera o arquivo objeto relocável troca.o
Depois, para linkar todos os objetos relocáveis em um único binário:
g++ troca.o main.o -o main
Abaixo está descrito os requisitos de cada um dos quatro programas que devem ser implementados.
- troca (já implementado, veja solução e entenda como funciona)
- imprime (já implementado, veja solução e entenda como funciona)
- copia
- polimorficos
Os dois primeiros já estão implementados em C++, como exemplo (veja resposta deste CATP).
A função troca
, cuja implementação está listada abaixo para o tipo int
(com um exemplo de funcionamento na função main
) troca o conteúdo das
duas variáveis: depois da função ser executada, o conteúdo da variável
a
encontra-se na variável b
e vice-versa.
#include <iostream>
void troca (int& a, int& b) {
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 1;
int b = 2;
std::cout << "a = " << a << ", b = " << b << std::endl;
troca(a, b);
std::cout << "a = " << a << ", b = " << b << std::endl;
}
Faça com que a função troca
seja polimórfica, passível de ser chamada
com qualquer tipo. Toda a implementação desta função deve estar no
arquivo troca.h
. Na função main
, mostre exemplos de utilização da
função polimórfica de troca com tipos variados.
A função imprime
abaixo aceita somente inteiros. Transforme-a para uma
função polimórfica que funcione também para uma class Aula
(por ser
implementada).
#include <iostream>
#include <string>
void imprime(int a, int b)
{
int c = a + b;
std::cout << "You gave me " << a << " and " << b << ".\n";
std::cout << "Together they make " << c << "." << std::endl;
}
int main()
{
std::string sA = "Ola";
std::string sB = "mundo";
imprime(1,2);
imprime(2.6, 3.7);
imprime('A','1');
//imprime(sA, sB);
}
Implemente uma função copia
que copia as posições de um vetor de
qualquer tipo para um outro vetor do mesmo qualquer tipo. A função
deve funcionar para qualquer tipo da linguagem de programação
escolhida. Implemente esta função no arquivo copia.h
. Na função main
,
utilize a função polimórfica de cópia.
Implemente uma classe polimórfica para Vetor
(não vale utilizar
std::vector
) com pelo menos três métodos para adicionar novos membros,
remover e concatenar objetos da mesma classe. Implemente estas
classes com polimorfismo paramétrico nos respectivos arquivos de
cabeçalho (.h). Na função main
, implementada no arquivo main.cc
,
instancie objetos destas classes utilizando tipos já existentes como
parâmetros.