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