Usando as classes desenvolvidas na questão anterior, crie uma array de dimensão . Crie um objeto de cada uma das classes e guarde-os na array. Depois, utilize a array para executar o método de cada objeto.
Passo 1
Na questão anterior nós desenvolvemos o código das classes , , e . 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 , 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 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
A primeira coisa que precisamos fazer é criar uma array de 4 posições do tipo 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
Vamos usar um 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 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 é executada a versão com polimorfismo de cada classe específica. Isso é possível pois o método foi declarado como virtual dentro da própria classe raiz!
E é isso! Terminamos a questão!