ÇÁ·Î±×·¡¹Ö
ù ÆäÀÌÁö ·£´ý ±Û ȸ¿ø°¡ÀÔ ·Î±×ÀÎ
ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-17 15:44:08
URL https://te31.com/rgr/view.php?id=study&no=1894 ¸ð¹ÙÀÏ È­¸é
c++ ´ÙÁß»ó¼Ó Áú¹® Á» µå¸±°Ô¿ä.

Àü¿¡ ÀÎÅÍÆäÀ̽º ±â¹ÝÀ¸·Î ÇÁ·Î±×·¡¹Ö ¿¬½ÀÀ» Çغ¸¶ó Çϼż­ ±×·¸°Ô ÇÏ´Â µµÁß¿¡ ÀÚ²Ù ¾²·¹±â°ªÀÌ µé¾î¿À´Â ¹®Á¦¸¦ °Þ°í ÀÖ¾î¿ä.

°£´ÜÇÏ°Ô ºÎ¸ð Ŭ·¡½º·Î ¾÷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

0
1 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-17 16:08:53
ÀÌ·± ÇüÅÂÀÇ Ä³½ºÆÃÀ» ¾ÈÇÏ´Â°Ô º£½ºÆ®±ä ÇÕ´Ï´Ù¸¸...
²À ÇؾßÇÑ´Ù¸é dynamic_cast¸¦ ÀÌ¿ëÇÏ´Â°Ô ÁÁ½À´Ï´Ù.

dynamic_cast<ICreature*>(enemy)->DecreaseHP(dynamic_cast<IAttacker*>(bullet));
2 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-17 16:46:04
µ¡ºÙ¿©¼­ ¸ðµç ¸â¹öÇÔ¼öÀÇ printf¹®¿¡ printf("%p", this); ¸¦ Ãß°¡Çغ¸¸é
°øºÎÇϴµ¥ Á¶±Ý ´õ µµ¿òÀÌ µÉ°Ì´Ï´Ù.
3 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-17 16:49:42
1/°¨»çÇÕ´Ï´Ù. ´ÙÀ̳ª¹Í ij½ºÆ® ÀÖ´Ü °Í¸¸ µé¾ú´Ù°¡ Áö±Ý Çغ¸´Ï µ¿ÀÛ Àß Çϳ׿ä.
2/°¨»çÇÕ´Ï´Ù. ÇÑ ¹ø ½áº¼°Ô¿ä. ½Å±âÇÑ°Ô ¸¹³×¿ä.

±Ùµ¥ C½ºÅ¸ÀÏÀÇ Çüº¯È¯°ú C++½ºÅ¸ÀÏÀÇ Çüº¯È¯¿¡ ¹«½¼ Â÷ÀÌÁ¡ÀÌ ÀÖ¾úÀ»±î¿ä? ¿Ö µ¿ÀÛÀÌ Àß µÉ±î...c++½ºÅ¸ÀÏÀÌ ¹» °Ë»çÇØÁشٴ °Ç ¾îµð¼­ µéÀº °Å °°±âµµ ÇÏÁö¸¸ Àß ¸ð¸£°Ú³×¿ä.
4 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-18 03:28:12
1. ¼±ÇüÀû »ó¼Ó °ü°èÀ϶§ÀÇ ¸Þ¸ð¸® ±¸Á¶
2. ´ÙÁß »ó¼Ó °ü°èÀ϶§ÀÇ ¸Þ¸ð¸® ±¸Á¶
3. RTTI (Real-Time Type Information)

À§ ¼¼°¡Áö¸¦ ÀÌÇØÇÏ°í ÀÖ¾î¾ß dynamic_cast¸¦ ÀÌÇØ ÇÒ¼ö ÀÖ½À´Ï´Ù.
5 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-18 13:48:03
ÀÎÅÍÆäÀ̽º °³³äÀÌ ¾Æ¿¹ ¾øÀ¸½Åµí
6 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-18 22:03:26
4/°¨»çÇÕ´Ï´Ù. ã¾Æº¼°Ô¿ä. ¸Þ¸ð¸® ¾î·Á¿ö¿ä..
5/Ãë¹Ì·Î Çϱ⿡ ÇÁ·Î±×·¡¹ÖÀÌ ÁÁÀº À帣Àΰ¡ »ý°¢ÇÏ°Ô µÊ, ¾Ë¾Æ¾ß ÇÒ °Ô ³Ê¹« ¸¹³×¿ä.
7 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-19 20:18:18
//6
1. µµµ¥Ã¼ ÀÎÅÍÆäÀ̽º¿¡ ¿Ö hp, weaponÀÌ ÀÖÀ¸¸ç (ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°Å¶ó¸é)
2. ¿¡³×¹Ì¶û ¾îÅÂÄ¿ ¸¸µé¶§ hp¶û weapon¿¡ °ª ÇÒ´çÀÌ ¾ø½¿
8 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-06-20 16:40:49
7/ ÀÎÅÍÆäÀ̽º¿¡´Â °¡»óÇÔ¼ö¸¸ ÀÖ´Â °Å¶ó´øµ¥, ¸·»ó ¸¸µé´Ùº¸´Ï±î ±ÍÂú´õ¶ó±¸¿ä. ±× ¸â¹öº¯¼öµé ´Ù °®°í ÀÖÀ¸·Á´Ï±î...ÇÊ¿äÇÑ ¾Ö¸¸ °®°í ÀÖ°í ½Í´Ù º¸´Ï±î °ü¸®ÇÒ ÁÙ ¸ô¶ó¼­ ÀÎÅÍÆäÀ̽º¿¡´Ù°¡ ²È¾Æ¹ö·È¾î¿ä...

ÇÒ´ç°ªÀÌ ¾ø´Â °ÍÀº ¿©±â ÀÛ¼ºÇÒ ¶§ ÀúÁö¸¥ ½Ç¼ö¿¡¿ä. ÃʱâÈ­ ¸®½ºÆ®¿¡¼­ ´Ù ÃʱâÈ­¸¦ ÇØÁÝ´Ï´ç. ±ÍÂú¾ÆÇÏÁö ¸»°í ¸â¹öº¯¼ö¸¦ ¿ÀºêÁ§Æ®·Î ¿Å°Ü¾ß°Ú³×¿ä.
´ñ±ÛÀ» ÀÛ¼ºÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.
(±ÇÇÑÀÌ ¾ø´Â ȸ¿ø·¹º§)
¸ñ·ÏÀ¸·Î
ÀÌ¿ë¾à°ü | ±¤°í/Á¦ÈÞ | °³ÀÎÁ¤º¸Ãë±Þ¹æħ | ¹®ÀÇ/½Å°í | ¸ð¹ÙÀÏ TE31 | ¼­¹ö ºÎÇÏ : 3%
½Ç½Ã°£ Issue Ä¿¹Â´ÏƼ TE31 [¾ËÁö·Õ] ¨Ï 2002-2024
TOP arrow_upward