0
ベクトル型のMapField *を持っていて、ShipFieldをpush_back()型にしたいときには、それは可能ですが、ダイナミック配列はどうですか? Map :: Mapコンストラクタの後にShipFieldをmapfield配列に代入することは可能ですが、どうすればよいですか?オブジェクトの2次元配列、サブクラスを割り当てる
class Map
{
public:
Map(const int mapsize);
virtual ~Map();
//GETTERS
MapField **get_mapfields();
//SETTERS;
bool check_ships();
bool shoot(Field * field);
private:
const int mapsize;
MapField **mapfields;
std::vector<Ship *> ships;
};
//
class MapField
: public Field
{
public:
MapField();
MapField(int x, int y);
virtual ~MapField();
//GETTERS
bool get_shoot_down();
//SETTERS
void set_shoot_down(bool shoot_down);
protected:
bool shoot_down;
};
//
class ShipField :
public MapField
{
public:
ShipField(Ship *ship, int x, int y);
virtual ~ShipField();
//GETTERS
Ship* get_ship();
//SETTERS
void set_ship(Ship * ship);
public:
Ship *ship;
};
//
Map::Map(const int mapsize)
:
mapsize(mapsize)
{
this->mapfields = new MapField* [mapsize];
for (int i = 0; i < mapsize; i++)
this->mapfields[i] = new MapField[mapsize];
}
はい。ちょうどそれを割り当てます。しかしここには二次元配列はありません。 –
'std :: vector' *は動的な「配列」です。これを使って。そして、あなたは入れ子にされたベクトルを持つことができます。 –
MapField ** mapfields; 2次元ダイナミックアレイではありませんか? – Felipe