2
I want to create a dynamic list that contains all Component derived objects.
I’m trying to do it this way:
map<string, Componente> tabuleiro_componentes;
tabuleiro_componentes.insert(make_pair('000',Peca(//Parametros)));
tabuleiro_componentes.insert(make_pair('001',Escudeiro(//Parametros)));
With this code I can add the components to the Map, he understands that the classes are daughters of Component. What I want to do is search the map for the string and use the unique methods of Peca and Squire, only that the only options shown are the methods of Component.
I believe it’s because Map is like <string, Componente>
, I must try another approach or there is solution ?
Solution: I built a palliative solution using simple and dynamic_cast pointers: https://github.com/KaueAlves/Grimorie-Tabuleiro/tree/kaue-dev-dinamic_cast
The archive component. h:
#ifndef COMPONENTE_H
#define COMPONENTE_H
#include "Default.h"
#include "Posicao.h"
class Componente
{
protected:
int id;
Posicao pos;
string nome;
string tipo;
public:
Componente(/* args */);
~Componente();
Componente(int id, string nome, string tipo);
// Gets
Posicao getPosicao();
string getTipo();
string getNome();
int getID();
// Sets
void setNome(string nome);
void setID(int id);
};
#endif
The archive Peca. h:
#ifndef PECA_H
#define PECA_H
#include "default.h"
#include "Posicao.h"
#include "Componente.h"
using namespace std;
class Peca : public Componente
{
private:
string sinal;
Posicao pos;
// Cor cor;
int qntMovimentos, qntMaxMovimentos;
pair<int,int> tamanho;
public:
//Construtor - Destruidor
Peca();
Peca( Posicao pos, pair<int,int> tamanho);
~Peca();
//Gets
Posicao getPosicao();
int getQntMaxMovimetnos();
int getQntMovimentos();
pair<int,int> getTamanho();
string getSinal();
//Sets
void setPosicao(Posicao pos);
void setQntMaxMovimentos(int qntMaxMovimentos);
void setQntMovimentos(int qntMovimentos);
void setTamanho(pair<int,int> tamanho);
void setSinal(string sinal);
//Funções
string toString();
};
#endif
The archive Squire. h:
#ifndef Escudeiro_H
#define Escudeiro_H
#include "../Default.h"
#include "../Peca.h"
class Escudeiro : public Peca
{
private:
/* data */
public:
Escudeiro();
~Escudeiro();
Escudeiro(Posicao pos, pair<int,int> tamanho);
string toString();
};
#endif