°£´ÜÇÏ°Ô ºÎ¸ð Ŭ·¡½º·Î ¾÷ij½ºÆÃÇؼ °ªÀ» ¹Þ¾Æ¿À¸é ¾²·¹±â°ªÀÌ µé¾îÀÖ¾î¿ä.
'»ó¼Ó¹ÞÀº ¸ðµç »ý¼ºÀÚ'¸¦ Ãʱâȸ®½ºÆ®¿¡¼ È£ÃâÇÏ°í ¸â¹öº¯¼öµéÀ» ÃʱâÈÇØÁֱ⠶§¹®¿¡ ¾²·¹±â°ªÀÌ µé¾îÀÖÀ¸¸é ¾ÈµÇ°Åµç¿ä. ±×·±µ¥ ÀÚ½ÄÀ» ºÎ¸ð·Î ¾÷ij½ºÆÃÇؼ ¸â¹öº¯¼ö°ªÀ» ¹Þ¾Æº¸¸é ¾²·¹±â°ªÀÌ µé¾îÀÖ½À´Ï´Ù.
//¾ê´Â °ø°Ý·ÂÀÌ ÀÖ¾î¼ GetWeaponÀ¸·Î °ø°Ý·ÂÀ» ¹ÞÀ» ¼ö ÀÖÀ½
class IAttacker
{
public:
IAttacker() :weapon(2) { printf("IAttacker »ý¼ºÀÚ È£ÃâµÊ. Weapon °ªÀº %d\n", weapon); }
virtual ~IAttacker() {}
int GetWeapon() { return weapon; }
private:
int weapon;
};
//¾ê´Â hp°¡ ÀÖ¾î¼ IAttackÀ» »ó¼Ó¹ÞÀº Ŭ·¡½º Ŭ·¡½º¸¦ ÁÖ¸é hp¸¦ °è»êÇÒ ¼ö ÀÖÀ½
class ICreature
{
public:
ICreature() :hp(10) { printf("ICreature »ý¼ºÀÚ È£ÃâµÊ. hp´Â %d\n", hp); }
virtual ~ICreature() {}
public:
void DecreaseHP(IAttacker* a)
{
printf("hp : %d , GetWeapon : %d\n", hp, a->GetWeapon());
hp = hp - a->GetWeapon();
}
protected:
int hp;
};
//¾ê´Â ±×³É °ÔÀÓ ¿ÀºêÁ§Æ®
class CGameObject
{
public:
CGameObject() { printf("CGameObject »ý¼ºÀÚ È£ÃâµÊ\n"); }
virtual ~CGameObject() {}
public:
virtual void Show() = 0;
};
//ÃÑ¾Ë Å¬·¡½º´Â À§ÀÇ ¸ðµç Ŭ·¡½º¸¦ »ó¼Ó¹ÞÀ½
class CBullet : public CGameObject, public ICreature, public IAttacker
{
public:
CBullet() :CGameObject(), ICreature(), IAttacker() {}
virtual ~CBullet() {}
virtual void Show() { printf("CBullet\n"); };
};
//Àû Ŭ·¡½ºµµ À§ÀÇ ¸ðµç Ŭ·¡½º¸¦ »ó¼Ó¹ÞÀ½
class CEnemy : public CGameObject, public ICreature, public IAttacker
{
public:
CEnemy():CGameObject(), ICreature(), IAttacker(){}
virtual ~CEnemy() {}
virtual void Show() { printf("CEnemy : %d\n", hp); };
};
int main()
{
std::vector<CGameObject*> vec = { new CEnemy, new CBullet };
CGameObject* enemy = vec.front();
CGameObject* bullet = vec.back();
enemy->Show();
bullet->Show();
//¿©±â¼ ¹®Á¦ ¹ß»ý. ¿¡·¯¹ß»ýÀº ¾Æ´ÏÁö¸¸ ¾²·¹±â°ªÀÌ µé¾îÀÖ¾î¿ä.
((ICreature*)enemy)->DecreaseHP(((IAttacker*)bullet));
enemy->Show();
return 0;
}
ºÐ¸íÈ÷ ¾ÈÀüÇÏ°Ô Ä³½ºÆÃÀ» ÇØÁá´Âµ¥ ¾î¶² ¹®Á¦°¡ ÀÖÀ»±î¿ä? Á¦°¡ Àß ¸ð¸£´Â ¾÷ij½ºÆÃÇÒ ¶§ ¹ß»ýÇÏ´Â ¸Þ¸ð¸® °ü·Ã ¹®Á¦Àϱî¿ä? ´ÙÁß»ó¼ÓÀÌ °®´Â ¹®Á¦´Â ¸ðÈ£ÇÔ¶§¹®À̶ó´Âµ¥, Á¦ °æ¿ì¿£ ¸ðÈ£ÇÔÀº ¾øÀ¸´Ï±î¿ä.
°Ô½ÃÆÇ Ã³À½ ¸¸µé¾îºÃÀ» ¶§´Â »ç¿ë¹ýÀ» ¸ô¶ó¼ ¹®Á¦¿´´Ù¸é, ÀÌ·± °ÔÀÓ¸¸µé±â´Â ¾ð¾î¹®¹ýµµ ÀÖÁö¸¸ ¹ÌÁöÀÇ ¿µ¿ªÀÌ ³Ê¹« ³Ð³×¿ä..¤Ð¤Ð¤Ð
¹¹°¡ ¹®Á¦Àϱî¿ä? ¾îÁ¦ºÎÅÍ ¾È Ç®·Á¼ Áװڳ׿ä..
Áú¹® | 1324¸íÀÌ Àоú¾î¿ä. 18.117.107.90