>>結城紬さんへ
返信ありがとうございます。
すいません、少しだけ補足足りませんでした。
cPlayerクラスの中のvector<cCard*>deckには、同じカードを何枚も作成したいのです。
提案されたものを試してみまして、deck内にcCardを2枚作製し、作成されたcCardの中の1枚のhpをいじり、別の1枚の中を参照してみた結果、同じアドレスの中身を変更していたので変更されたものがすべてに適応されていました。実際に実行したコードを載せておきます。
これを複数枚生成してもちゃんと中身は別々に生成されるようにするにはどうすればいいでしょうか。
コード:
//Source.cpp
#include"Header.h"
#include"Player.h"
int main()
{
cPlayer p;
cCard* test1 = new cTEST1;
/* 他の場所で一旦全てのカードを作成し、それを保存しておく場所を作ってる代用品。*/
p.Add(test1);
p.Add(test1);
p.Add(test1);
p.deck[0]->hp = 2;
printf("%d", p.deck[1]->hp);// ここでhp10を表示したい。
delete test1;
return 0;
}
コード:
// Header.h
#include<stdio.h>
#include<Windows.h>
#include<vector>
using namespace std;
class cCard
{
public:
cCard() { hp = 1; }
int hp;
};
class cTEST1 :public cCard
{
public:
cTEST1() : cCard() { this->hp = 10; }
};
コード:
// Player.h
class cPlayer
{
public:
vector<cCard*>deck;// ここにカード突っ込みたい。
virtual ~cPlayer();// 解放処理
void Add(cCard*);
void Add(int i);
};
コード:
#include"Header.h"
#include"Player.h"
cPlayer::~cPlayer()
{
for (auto _card : deck)
{
delete _card;
}
}
void cPlayer::Add(cCard* _card)
{// ここをいじって何とかしたい。
deck.push_back(_card);
}
void cPlayer::Add(int i)
{// これでやればうまくいきますが、カードが増えるたびにコードを増やさないといけないのでできれば別の方法を探しています。
switch (i)
{
case 0:
deck.push_back(new cCard);
break;
case 1:
deck.push_back(new cTEST1);
break;
default:
break;
}
}