Á¤Àû ¸â¹ö ÇÔ¼öÀÇ °³³äµµ Á¤Àû ¸â¹ö º¯¼öÀÇ °æ¿ì¿Í ºñ½ÁÇÏ´Ù. °´Ã¼¿Í Á÷Á¢ÀûÀ¸·Î ¿¬°üµÈ´Ù±âº¸´Ù´Â Ŭ·¡½º¿Í ¿¬°üµÇ¸ç »ý¼ºµÈ °´Ã¼°¡ Çϳªµµ ¾ø´õ¶óµµ Ŭ·¡½ºÀÇ À̸§¸¸À¸·Î È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀÏ¹Ý ¸â¹ö ÇÔ¼ö´Â °´Ã¼¸¦ ¸ÕÀú »ý¼ºÇÑ ÈÄ obj.func() Çü½ÄÀ¸·Î È£ÃâÇÑ °´Ã¼¿¡ ´ëÇØ ¾î¶² ÀÛ¾÷À» ÇÑ´Ù. ÀÌ¿¡ ºñÇØ Á¤Àû ¸â¹ö ÇÔ¼ö´Â Class::func() Çü½ÄÀ¸·Î È£ÃâÇϸç Ŭ·¡½º Àüü¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ ÀÛ¾÷À» ÇÑ´Ù. ÁÖ·Î Á¤Àû ¸â¹ö º¯¼ö¸¦ Á¶ÀÛÇϰųª ÀÌ Å¬·¡½º¿¡ ¼ÓÇÑ ¸ðµç °´Ã¼¸¦ À§ÇÑ ¾î¶² 󸮸¦ ÇÑ´Ù.
Á¤Àû ¸â¹ö ÇÔ¼ö¸¦ ¼±¾ðÇÏ´Â ¹æ¹ýÀº Á¤Àû ¸â¹ö º¯¼ö¿Í µ¿ÀÏÇÏ´Ù. Ŭ·¡½º ¼±¾ðºÎÀÇ ÇÔ¼ö ¿øÇü¾Õ¿¡ staticÀ̶ó´Â Ű¿öµå¸¸ ºÙÀÌ¸é µÈ´Ù. Á¤Àû ¸â¹ö ÇÔ¼öÀÇ º»Ã¼´Â Ŭ·¡½º ¼±¾ðºÎ¿¡ ÀζóÀÎ Çü½ÄÀ¸·Î ÀÛ¼ºÇÒ ¼öµµ ÀÖ°í ¾Æ´Ï¸é ¿ÜºÎ¿¡ µû·Î Á¤ÀÇÇÒ ¼öµµ Àִµ¥ ¿ÜºÎ¿¡ ÀÛ¼ºÇÒ ¶§ static Ű¿öµå´Â »ý·«ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾Õ¿¡¼ ¸¸µç °´Ã¼ °³¼ö¸¦ ¼¼´Â ¿¹Á¦¸¦ Á¶±Ý ¼öÁ¤ÇØ º» °ÍÀÌ´Ù.
|
¿¹ Á¦ : ObjCount2 |
#include <Turboc.h>
class Count
{
private:
int Value;
static int Num;
public:
Count() { Num++; }
~Count() { Num--; }
static void InitNum() {
Num=0;
}
static void OutNum() {
printf("ÇöÀç °´Ã¼ °³¼ö = %d\n",Num);
}
};
int Count::Num;
void main()
{
Count::InitNum();
Count::OutNum();
Count C,*pC;
C.OutNum();
pC=new Count;
pC->OutNum();
delete pC;
pC->OutNum();
printf("Å©±â=%d\n",sizeof(C));
}
Á¤Àû ¸â¹ö º¯¼ö NumÀ» Á¤ÀÇÇÒ ¶§ 0À¸·Î ÃʱâÈÇÏÁö ¾Ê¾ÒÀ¸¸ç ÀÌ ÀÛ¾÷Àº »õ·Î Ãß°¡µÈ Á¤Àû ¸â¹ö ÇÔ¼ö InitNumÀÌ ´ã´çÇÑ´Ù. InitNumÀº Á¤Àû ¸â¹ö ÇÔ¼öÀ̹ǷΠCount Ŭ·¡½ºÀÇ °´Ã¼°¡ ÀüÇô ¾ø´Â »óÅ¿¡¼µµ È£ÃâµÉ ¼ö ÀÖ´Ù. main¿¡¼ Count::InitNum()À» ¸ÕÀú È£ÃâÇÏ¿© NumÀ» 0À¸·Î ÃʱâÈÇÏ¿´´Ù. º¯¼ö¸¦ ÃʱâÈÇÏ´Â º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µé¾úÀ¸¹Ç·Î ¿øÇÑ´Ù¸é ½ÇÇàÁß¿¡ ¾ðÁ¦µçÁö ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© NumÀ» 0À¸·Î ¸®¼ÂÇÒ ¼öµµ ÀÖ´Ù.
°´Ã¼ÀÇ °³¼ö¸¦ Ãâ·ÂÇÏ´Â OutNum ÇÔ¼öµµ °³º° °´Ã¼¿¡ ´ëÇÑ ÇÔ¼ö°¡ ¾Æ´Ï±â ¶§¹®¿¡ Á¤Àû ¸â¹ö ÇÔ¼ö·Î ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. OutNum ÇÔ¼ö°¡ °´Ã¼·ÎºÎÅÍ È£ÃâµÇÁö ¾ÊÀ¸¹Ç·Î ÀÌÁ¦ °´Ã¼°¡ ÀüÇô »ý¼ºµÇÁö ¾ÊÀº »óÅÂ, Áï NumÀÌ 0ÀÎ »óÅ¿¡ ´ëÇÑ Ãâ·Âµµ °¡´ÉÇÏ´Ù. Á¤Àû ¸â¹ö ÇÔ¼ö°¡ ¾Æ´Ï¸é ÀÌ·± È£ÃâÀº ºÒ°¡´ÉÇÏ´Ù. main¿¡¼ Áö¿ª °´Ã¼ C¸¦ »ý¼ºÇϱâ Àü¿¡ Count::OutNum()À» È£ÃâÇߴµ¥ ÀÌ È£Ãâ¹®Àº 0À» Ãâ·ÂÇÏ¸ç ¾ÆÁ÷ »ý¼ºµÈ °´Ã¼°¡ ¾ø´Ù´Â °ÍÀ» º¸¿© ÁØ´Ù.
C °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ C.OutNum()À» È£ÃâÇϸé 1ÀÌ Ãâ·ÂµÇ°í pC°´Ã¼¸¦ µ¿Àû »ý¼ºÇÑ ÈÄ pC->OutNum()À» È£ÃâÇϸé 2°¡ Ãâ·ÂµÈ´Ù. ÀÌ µÎ È£ÃâÀÇ ¿¹Ã³·³ Á¤Àû ¸â¹ö ÇÔ¼ö¸¦ °´Ã¼ÀÇ À̸§À¸·Î È£ÃâÇÒ ¼öµµ ÀÖÁö¸¸ À̶§ °´Ã¼ÀÇ À̸§Àº ¾Æ¹«·± Àǹ̰¡ ¾øÀ¸¸ç ÄÄÆÄÀÏ·¯´Â °´Ã¼°¡ ¼Ò¼ÓµÈ Ŭ·¡½ºÀÇ Á¤º¸¸¸ »ç¿ëÇÑ´Ù. ÆíÀÇ»ó C.OutNum(), pC->OutNum(); À̶ó´Â Ç¥ÇöÀ» Çã¿ëÇÒ »ÓÀÌÁö ÀÌ È£ÃâÀº ½ÇÁ¦·Î Count::OutNum()À¸·Î ÄÄÆÄÀϵȴٴ ¾ê±â´Ù.
±×·¡¼ delete pC;·Î pC °´Ã¼¸¦ ÇØÁ¦ÇÑ ÈÄ¿¡µµ pC->OutNum()À̶ó´Â È£ÃâÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇÑ´Ù. ÄÄÆÄÀÏ·¯´Â pC¿¡ ½ÇÁ¦·Î °´Ã¼°¡ »ý¼ºµÇ¾î ÀÖ´ÂÁö¸¦ º¼ Çʿ䵵 ¾øÀ¸¸ç pC°¡ Count *ÇüÀ̶ó´Â °Í¸¸ ÂüÁ¶ÇÒ »ÓÀÌ´Ù. ½ÉÁö¾î mainÀÇ 4¹øÂ° ÁÙ¿¡ pC°¡ ÇÒ´çµÇ±âµµ ÀüÀÎ C.OutNum()À» pC->OutNum()À¸·Î ¹Ù²ãµµ Àß µ¿ÀÛÇÑ´Ù. ÀÌ°É º¸¸é ÄÄÆÄÀÏ·¯°¡ Æ÷ÀÎÅÍÀÇ Å¸ÀÔ¸¸À¸·Î È£ÃâÇÒ ÇÔ¼ö¸¦ °áÁ¤ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
Count *pC;
pC->OutNum(); // »ý¼º Àü¿¡µµ È£Ãâ °¡´É
pC=new Count;
pC->OutNum(); // »ý¼º ÈÄ¿¡µµ È£Ãâ °¡´É
delete pC;
pC->OutNum(); // ÆÄ±«µÈ ÈÄ¿¡µµ È£Ãâ °¡´É
Á¤Àû ¸â¹ö ÇÔ¼ö´Â ƯÁ¤ÇÑ °´Ã¼¿¡ ÀÇÇØ È£ÃâµÇ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ¼û°ÜÁø Àμö this°¡ Àü´ÞµÇÁö ¾Ê´Â´Ù. Ŭ·¡½º¿¡ ´ëÇÑ ÀÛ¾÷À» Çϱ⠶§¹®¿¡ ¾î¶² °´Ã¼°¡ ÀÚ½ÅÀ» È£ÃâÇß´ÂÁö ±¸ºÐÇÒ Çʿ䰡 ¾øÀ¸¸ç µû¶ó¼ È£ÃâÇÑ °´Ã¼¿¡ ´ëÇÑ Á¤º¸µµ ÇÊ¿ä¾ø´Ù. ±×·¡¼ Á¤Àû ¸â¹ö ÇÔ¼ö´Â Á¤Àû ¸â¹ö¸¸ ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¸ç ÀÏ¹Ý ¸â¹ö(ºñÁ¤Àû ¸â¹ö)´Â ÂüÁ¶ÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÀÏ¹Ý ¸â¹ö ¾Õ¿¡´Â ¾Ï½ÃÀûÀ¸·Î this->°¡ ºÙ´Âµ¥ Á¤Àû ¸â¹ö ÇÔ¼ö´Â this¸¦ Àü´Þ¹ÞÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Á¤Àû ¸â¹ö ÇÔ¼öÀÎ InitNum¿¡¼ ºñÁ¤Àû ¸â¹öÀÎ Value¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù.
static void InitNum() {
Num=0;
Value=5;
}
ÀÌ Äڵ带 ÄÄÆÄÀÏÇϸé Á¤Àû ¸â¹ö ÇÔ¼ö¿¡¼ Value¸¦ ºÒ¹ýÀ¸·Î ÂüÁ¶Çß´Ù´Â ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù. InitNumÀÇ º»Ã¼¿¡¼ Value¸¦ ĪÇÏ¸é ´©±¸ÀÇ ValueÀÎÁö¸¦ ÆÇ´ÜÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ Á¤Àû ¸â¹ö ÇÔ¼ö´Â »ý¼ºµÈ °´Ã¼°¡ ÀüÇô ¾ø¾îµµ È£ÃâÇÒ ¼ö Àִµ¥ À̶§ Value´Â ¾Æ¿¹ Á¸ÀçÇÏÁöµµ ¾Ê´Â´Ù. ºñÁ¤Àû ¸â¹ö ÇÔ¼öµµ È£ÃâÇÒ ¼ö ¾øÀ¸¸ç ¿À·ÎÁö Á¤Àû ¸â¹ö¸¸ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.