Hoje me perguntaram sobre vetores em C++, eles são cruciais em um jogo qualquer, para podermos dar quantidade a nossos objetos, sendo eles, inimigos, jogadores, armas, tiros, bolas, caixas… e etc…

É muito facil utiliza-los, porém a pergunta é um pouco mais avançada que sua simples utilização. Será possível utilizar um só vetor para objetos de classes diferentes?

A resposta é, sim, podemos utilizar de forma simplista, herança simples e um vetor para a classe mãe. Assim com um cast básico, podemos retornar objetos diferentes em um só vetor.

#include <iostream>
#include <vector>

// Classe Mãe
class Inimigo {
public:
   int life;
};

// Classe Filha
class Monstro : public Inimigo {
public:
   int tentacles;
};

// Classe Filha
class Zumbi : public Inimigo {
public:
   int arms;
};

int main (int argc, char * const argv[]) {
   // Vetor de objetos da classe mãe (ou filhos)
   std::vector<Inimigo*> inimigos;

   // Criando um objeto filho
   Monstro* louco = new Monstro();
   louco->life = 10;

   // Incluindo objeto filho no vetor
   inimigos.push_back(louco);

   // Criando outro objeto filho
   Zumbi* morto = new Zumbi();
   morto->life = 5;

   // Incluindo outro objeto filho no vetor
   inimigos.push_back(morto);

   // Resgatando o objeto filho do vetor
   louco = (Monstro*)inimigos.at(0);
   louco->tentacles = 3;

   // Resgatando outro objeto filho do vetor
   morto = (Zumbi*)inimigos.at(1);
   morto->arms = 2;

   // Imprimindo propriedades dos objetos
   std::cout << louco->life << "\n" << louco->tentacles << "\n";
   std::cout << morto->life << "\n" << morto->arms << "\n";

   return 0;
}

PS: Nesse exemplo, eu sei a posição certa de cada classe de objeto, mas poderia ser diferente, tomem cuidado