Exercícios Resolvidos de Mais herança e mais polimorfismo

Ver Teoria

Enunciado

Usando as classes desenvolvidas na questão anterior, crie uma array de dimensão 4 . Crie um objeto de cada uma das classes e guarde-os na array. Depois, utilize a array para executar o método p r i n t ( ) de cada objeto.

Passo 1

Na questão anterior nós desenvolvemos o código das classes V e i c u l o , V e i c u l o T e r r e s t r e , V e i c u l o   A q u a t i c o e V e i c u l o A n f i b i o . Essas quatro classes estão relacionadas entre si através de uma hierarquia de classe em forma de diamante.

Nessa hierarquia, a classe raiz é a V e í c u l o , e o interessante disso é que quando criamos um ponteiro para uma classe raiz, a gente pode usar esse ponteiro para um objeto de classe derivada.

E é quase isso que a questão quer! A gente pode criar um array de ponteiros do tipo V e i c u l o e usar esse array para guardar endereços de memória de objetos de cada uma das classes.

Passo 2

Pra fazer essa questão, você precisa ter feito a questão anterior 😬. Mas não tem grilo, da uma olhadinha nela que está tudo explicado passo-a-passo!

Então, considerando que você já está com todas as classes aí, vamos fazer uma nova m a i n ( )

A primeira coisa que precisamos fazer é criar uma array de 4 posições do tipo V e i c u l o que possa armazenar ponteiros:

E em seguida, vamos criar objetos de cada uma das classes e armazenar os endereços de memória dentro dessa array:

E prontinho! Criamos ponteiros que apontam para a classe raiz da hierarquia e armazenamos endereços de memória de objetos que pertencem a outras classes da hierarquia.

Passo 3

O passo seguinte é executar o método p r i n t ( )

Vamos usar um f o r para facilitar esse trabalho. Para cada iteração vamos acessar um novo endereço de memória de um objeto, e usando o operador - > podemos usar esse endereço de memória para acessar o método p r i n t ( ) do objeto.

Rodando o código, vamos ter o seguinte resultado:

Viu que interessante?! O vetor de ponteiros que estamos utilizando aponta para a classe raiz, mas sempre que a gente executa o método p r i n t ( ) é executada a versão com polimorfismo de cada classe específica. Isso é possível pois o método p r i n t ( ) foi declarado como virtual dentro da própria classe raiz!

E é isso! Terminamos a questão!

Resposta