int main()
{
  NormalState ns; FastState fs;
  Hero hero;
  hero.setState(&ns);   // 초기 상태
  hero.run();
  hero.attack();

  //------------------   아이템 획득 (이전의 상태는 공유된다.)
  hero.setState(&fs);
  hero.run();
  hero.attack();
}
int main()
{
	Hero normal;
	FastItemHero fast;
	Hero* hero = &normal; // 초기 상태

	hero->run();
	hero->attack();

	// 아이템 획득
	hero = &fast;
	hero->run();
	hero->attack();
	
}
int main()
{
	Hero normal;
	FastItemHero fast;
	Hero* hero = &normal; // 초기 상태

	hero->run();
	hero->attack();

	hero->gold += 10;
	cout << "gold: " << hero->gold << endl;	// gold: 10

	// 아이템 획득
	// 동작 뿐 아니라 상태도 변경된다. gold는 공유되어야 한다.
	// fast의 gold가 덮어써진다.
	hero = &fast;
	hero->run();
	hero->attack();
	cout << "gold: " << hero->gold << endl;	// gold: 0
}