¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ´Â ¹æ¹ý¿¡´Â ¸â¹ö ÇÔ¼ö·Î ¸¸µå´Â ¹æ¹ý°ú Àü¿ª ÇÔ¼ö·Î ¸¸µå´Â ¹æ¹ý µÎ °¡Áö°¡ ÀÖ´Ù°í Çß´Ù. ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö·Î ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇØ¼´Â ¾Õ Àý¿¡¼ ÃæºÐÈ÷ ¿¬±¸ÇØ º¸¾ÒÀ¸¹Ç·Î À̹ø¿¡´Â Àü¿ª ÇÔ¼ö·Î ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇØ ¿¬±¸ÇØ º¸ÀÚ. Àü¿ª ¿¬»êÀÚ ÇÔ¼ö´Â Ŭ·¡½º ¿ÜºÎ¿¡ Á¸ÀçÇ쵂 Àμö·Î Ŭ·¡½ºÀÇ °´Ã¼¸¦ ¹Þ¾ÆµéÀδÙ.
Ŭ·¡½ºÀÇ °´Ã¼°¡ Àμö°¡ µÈ´Ù´Â °ÍÀº °ð ÇÇ¿¬»êÀÚ ÁßÀÇ Çϳª°¡ °´Ã¼°¡ µÈ´Ù´Â ¶æÀ̹ǷΠŬ·¡½º ¿ÜºÎÀÇ Àü¿ª ÇÔ¼ö·Îµµ Ŭ·¡½ºÀÇ °íÀ¯ÇÑ ¿¬»ê ¹æ¹ýÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¶õ Àμö·Î Àü´ÞµÈ ´ë»óÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¹Ç·Î ´ç¿¬ÇÑ ¾ê±â´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾Õ¿¡¼ ¸¸µé¾ú´ø Time Ŭ·¡½ºÀÇ + ¿¬»êÀÚ¸¦ Àü¿ª ÇÔ¼ö·Î »õ·Î ÀÛ¼ºÇØ º» °ÍÀÌ´Ù.
|
¿¹ Á¦ : TimeOpPlus |
#include <Turboc.h>
class Time
{
friend const Time operator+(const Time &T1,const Time &T2);
private:
int hour,min,sec;
public:
Time() { }
Time(int h, int m, int s) { hour=h; min=m; sec=s; }
void OutTime() {
printf("%d:%d:%d\n",hour,min,sec);
}
};
const Time operator+(const Time &T1,const Time &T2)
{
Time R;
R.sec=T1.sec + T2.sec;
R.min=T1.min + T2.min;
R.hour=T1.hour + T2.hour;
R.min += R.sec/60;
R.sec %= 60;
R.hour += R.min/60;
R.min %= 60;
return R;
}
void main()
{
Time A(1,1,1);
Time B(2,2,2);
Time C;
A.OutTime();
B.OutTime();
C=A+B;
C.OutTime();
}
operator + ¶ó´Â À̸§ÀÇ Àü¿ª ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖÀ¸¸ç ÀÌ ÇÔ¼ö´Â TimeÇüÀÇ ·¹ÆÛ·±½º T1, T2¸¦ Àμö·Î Àü´Þ¹Þ¾Æ Àӽà °´Ã¼ R¿¡ µÎ °´Ã¼ÀÇ ÇÕÀ» ´õÇØ ¸®ÅÏÇÑ´Ù. ½Ã°£³¢¸®ÀÇ ÇÕÀ» ±¸ÇÏ´Â ³í¸®´Â ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ °æ¿ì¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇ쵂 Àü¿ª ÇÔ¼ö¶ó´Â Á¡¸¸ ´Ù¸¦ »ÓÀÌ´Ù. ½ÇÇà °á°ú´Â ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ °æ¿ì¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.
1:1:1
2:2:2
3:3:3
Time Ŭ·¡½º¿¡´Â ½Ã°£³¢¸® ´õÇÏ´Â ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÁö¸¸ main ÇÔ¼ö´Â operator +Àü¿ª ÇÔ¼öÀÇ µµ¿òÀ¸·Î ½Ã°£ °´Ã¼³¢¸® µ¡¼ÀÀ» ÈǸ¢ÇÏ°Ô ¼öÇàÇϰí ÀÖ´Ù. Time Ŭ·¡½º´Â ¿¬»êÀÚ ÇÔ¼ö¸¦ ¸â¹ö·Î Á¤ÀÇÇÏÁö ¾Ê´Â ´ë½Å operator + Àü¿ª ÇÔ¼ö¸¦ friend·Î ÁöÁ¤ÇÏ¿© ÀÚ½ÅÀÇ ¸ðµç ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖµµ·Ï Çã¶ôÇÑ´Ù.
¸¸¾à Time Ŭ·¡½º ¼±¾ðºÎÀÇ ¼±µÎ¿¡ ÀÖ´Â friend ¼±¾ðÀ» »ý·«ÇØ ¹ö¸®¸é ¼ö¸¹Àº ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. TimeÀÇ ÁÖ¿ä ¸â¹öÀÎ hour, min, secÀº ¸ðµÎ ÇÁ¶óÀ̺ñÆ® ¾×¼¼½º ¼Ó¼ºÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î Ŭ·¡½º ¿ÜºÎÀÇ Àü¿ª ÇÔ¼ö¿¡¼ ÀÌ ¸â¹ö¸¦ ÂüÁ¶ÇÒ ¼ö ¾ø´Ù. Àü¿ª operator + ÇÔ¼ö´Â ½Ã°¢ °´Ã¼³¢¸® µ¡¼ÀÀ» Çϱâ À§ÇØ ÀÌ ¸â¹öµéÀ» ÀÚÀ¯·Ó°Ô ÀÐÀ» ¼ö ÀÖ¾î¾ß Çϴµ¥ ÀÌ·² ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù·Î ÇÁ·»µå ¼±¾ðÀÌ´Ù.
C=A+B; ¿¬»ê¹®Àº C=operator +(A,B);ÀÇ ÇÔ¼ö È£Ãâ¹® Çü½ÄÀ¸·Î ¹Ù²Ü ¼ö ÀÖ´Ù. ¸¸¾à ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀ̳ª È£Ãâ ¹æ¹ýÀÌ Àß ÀÌÇØµÇÁö ¾Ê´Â´Ù¸é operator + ÇÔ¼öÀÇ À̸§À» AddTimeÀ̶ó´Â Á» ´õ Ä£¼÷ÇÑ À̸§À¸·Î Àá½Ã ¹Ù²ã º¸ÀÚ. ¹°·Ð ÇÔ¼öÀÇ º»Ã¼´Â ÀüÇô °Çµå¸± Çʿ䰡 ¾ø´Ù.
const Time AddTime(const Time &T1,const Time &T2)
{
....
}
±×¸®°í main ÇÔ¼ö¿¡ ÀÖ´Â C=A+B; È£Ãâ¹®À» C=AddTime(A,B); ·Î ¹Ù²ã º¸¸é ¶È°°ÀÌ µ¿ÀÛÇÒ °ÍÀÌ´Ù. AddTimeÀº TimeÇüÀÇ °´Ã¼¸¦ Àμö·Î ÃëÇÒ »ÓÀÌÁö ´Ü¼øÇÑ ÇÔ¼ö¿¡ ºÒ°úÇϸç ÀÌ ÇÔ¼öÀÇ À̸§¸¸ C++ÀÌ Á¤ÀÇÇÏ´Â ¿¬»êÀÚ ÇÔ¼öÀÇ À̸§ ±ÔÄ¢´ë·Î ¹Ù²Ù¸é ¹Ù·Î Àü¿ª operator + ¿¬»êÀÚ ÇÔ¼ö°¡ µÇ´Â °ÍÀÌ´Ù. °á±¹ Àü¿ª ¿¬»êÀÚ ÇÔ¼ö¶õ À̸§ÀÌ Á¶±Ý ƯÀÌÇÒ »ÓÀÌÁö ÀϹÝÀûÀÎ ÇÔ¼ö·Î ÀÌÇØÇÏ¸é ½±´Ù.
°´Ã¼¸¦ À§ÇÑ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ´Â µÎ °¡Áö ¹æ¹ý, Áï ¸â¹ö·Î ¸¸µå´Â ¹æ¹ý°ú Àü¿ªÀ¸·Î ¸¸µå´Â ¹æ¹ýÀ» ¸ðµÎ ½Ç½ÀÇØ ºÃ´Ù. µÎ ÇÔ¼ö´Â Ŭ·¡½ºÀÇ ³»ºÎ¿¡ Àִ°¡ ¾Æ´Ï¸é ¿ÜºÎ¿¡ ÀÖµÇ ÇÁ·»µå·Î ÁöÁ¤µÇ¾î Àִ°¡¸¸ ´Ù¸¦ »ÓÀÌ¸ç ¿¬»êÀ» ÇÏ´Â ³í¸®³ª È£ÃâÇÏ´Â ¹æ¹ýÀº µ¿ÀÏÇÏ´Ù. µÎ Çü½ÄÀÇ ¿¬»êÀÚ ÇÔ¼öÀÇ Â÷ÀÌÁ¡Àº ¹Ù·Î ÇÔ¼öÀÇ ¿øÇü¿¡ ÀÖ´Ù.

¿øÇüÁß °¡Àå ´Ù¸¥ ºÎºÐÀº ÀμöÀÇ °³¼öÀÌ´Ù. ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ °æ¿ì´Â ¿ø·¡ÀÇ ÇÇ¿¬»êÀÚº¸´Ù ÀμöÀÇ °³¼ö°¡ Ç×»ó Çϳª ´õ ÀûÀºµ¥ +´Â ÀÌÇ× ¿¬»êÀÚÀ̹ǷΠµÎ °³ÀÇ ÇÇ¿¬»êÀÚ¸¦ ÃëÇÏÁö¸¸ ¸â¹ö ¿¬»êÀÚ ÇÔ¼öÀÇ Àμö´Â Çϳª¸¸ ÀÖÀ¸¸é µÈ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °´Ã¼ÀÎ *this°¡ ¾Ï½ÃÀûÀÎ Áº¯ÀÌ µÇ¸ç ³ª¸ÓÁö ¿ìº¯ÀÌ µÉ ´ë»ó¸¸ Àμö·Î Àü´Þ¹Þ´Â´Ù. ³ª ÀÚ½Å(this)°ú ¿¬»êµÉ ´ë»óÀÌ ´©±¸Àΰ¡¸¸ ¾Ë¸é µÇ´Â °ÍÀÌ´Ù. ¸¸¾à ++ ´ÜÇ× ¿¬»êÀÚ¸¦ ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö·Î ¿À¹ö·ÎµùÇÑ´Ù¸é È£ÃâÇÏ´Â °´Ã¼ ÀÚü°¡ ÇÇ¿¬»êÀÚ°¡ µÇ¹Ç·Î Àμö´Â ÇÊ¿ä¾øÀ» °ÍÀÌ´Ù.
ÀÌ¿¡ ºñÇØ Àü¿ª ¿¬»êÀÚ ÇÔ¼ö´Â ¿ø·¡ÀÇ ÇÇ¿¬»êÀÚ¿Í °°Àº ¼öÀÇ Àμö¸¦ °¡Áø´Ù. + ¿¬»êÀÚ°¡ ÀÌÇ× ¿¬»êÀÚÀ̹ǷΠoperator + Àü¿ª ¿¬»êÀÚ ÇÔ¼ö´Â µÎ °³ÀÇ Àμö¸¦ ÃëÇϰí ++ ¿¬»êÀÚ´Â ´ÜÇ× ¿¬»êÀÚÀ̹ǷΠoperator ++ Àü¿ª ¿¬»êÀÚ ÇÔ¼ö´Â Áõ°¡½Ãų ´ë»ó Çϳª¸¸ Àμö·Î Àü´Þ¹ÞÀ¸¸é µÈ´Ù. ¾Ï½ÃÀûÀ¸·Î Àü´ÞµÇ´Â this°¡ ¾øÀ¸¹Ç·Î Á¿캯 ¸ðµÎ Àμö·Î Àü´Þ¹Þ¾Æ¾ß ÇÑ´Ù.
±×·¸´Ù¸é ¿¬»êÀÚ ¿À¹ö·ÎµùÀÌ ÇÊ¿äÇÒ ¶§ µÎ °¡Áö Çü½ÄÁß ¾î¶² ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ÁÁÀ»±î? µÎ Çü½ÄÀÇ ¿¬»êÀÚ ÇÔ¼ö´Â Á¤ÀÇÇÏ´Â À§Ä¡¸¸ ´Ù¸¦ »Ó Å« Â÷ÀÌÁ¡Àº ¾øÀ¸¹Ç·Î ´ë°³ÀÇ °æ¿ì µÑ Áß ¾î¶² Çü½ÄÀ» ¾²´õ¶óµµ Å« »ó°üÀº ¾ø´Ù. Ŭ·¡½ºÀÇ °´Ã¼¸¦ ´Ù·ç´Â ¿¬»êÀ̶ó¸é °¡±ÞÀûÀ̸é Ŭ·¡½º¿¡ ¼Ò¼ÓµÇ´Â °ÍÀÌ Ä¸½¶ÈÀÇ ¿øÄ¢¿¡ ºÎÇյǹǷΠ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö·Î ¸¸µå´Â °ÍÀÌ ´õ ±ò²ûÇÏ´Ù. ´Ù¸¸ ºÒ°¡ÇÇÇÏ°Ô Àü¿ªÀ¸·Î¸¸ ¸¸µé¾î¾ß ÇÏ´Â °æ¿ìµµ ÀÖ°í =, ( ), [ ], -> ¿¬»êÀÚµéÀº ¹Ýµå½Ã ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö·Î¸¸ ¸¸µé¾î¾ß ÇÑ´Ù. ÀÌ·± Ư¼öÇÑ °æ¿ìµé¿¡ ´ëÇØ¼´Â µÚ¿¡¼ °³º° ¿¬»êÀÚ¸¦ ´Ù·ê ¶§ »ó¼¼ÇÏ°Ô ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
°á±¹ µÎ °¡Áö Çü½ÄÀÌ ¸ðµÎ ´Ù ÇÊ¿äÇÏ´Ù. ±×·² ÇÊ¿ä´Â ¾øÁö¸¸ ¸¸¾à ¶È°°Àº ¿¬»êÀÚ ÇÔ¼ö¸¦ ¸â¹ö·Îµµ Á¤ÀÇÇϰí Àü¿ªÀ¸·Îµµ Á¤ÀÇÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? ÀÌ °æ¿ì Á¤ÀÇ ÀÚü´Â °¡´ÉÇÏÁö¸¸ È£ÃâÇÒ ¶§ ¸ðÈ£ÇÏ´Ù´Â ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÇ¹Ç·Î ¾çÂÊ Çü½ÄÀÇ ¿¬»êÀÚ¸¦ ¸ðµÎ Á¤ÀÇÇØ¼´Â ¾ÈµÇ¸ç ±×·² Çʿ䵵 ¾ø´Ù. ÄÄÆÄÀÏ·¯´Â ¸ðÈ£ÇÑ °ÍÀ» °¡Àå ½È¾îÇÑ´Ù.
Âü°í·Î Àü¿ª ¿¬»êÀÚ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¿°ÅÇü¿¡ ´ëÇÑ ¿¬»êµµ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ¿°ÅÇüµµ ÇϳªÀÇ Å¸ÀÔÀÌ¸ç ¿À¹ö·ÎµùÀÇ Àç·á·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¿°ÅÇüÀ» ÇÇ¿¬»êÀÚ·Î °¡Áö´Â ¿¬»êÀÚµµ Áߺ¹ Á¤ÀÇ °¡´ÉÇÏ´Ù. ´Ü, ¿°ÅÇüÀº ¸â¹ö ÇÔ¼ö¸¦ °¡ÁöÁö ¸øÇϹǷΠÀü¿ª ¿¬»êÀÚ ÇÔ¼ö·Î¸¸ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
|
¿¹ Á¦ : EnumOperator |
#include <Turboc.h>
enum origin { EAST, WEST, SOUTH, NORTH };
origin &operator++(origin &o)
{
if (o == NORTH) {
o = EAST;
} else {
o=origin(o+1);
}
return o;
}
void main()
{
origin mark=WEST;
int i;
for (i=0;i<7;i++) {
printf("%d\n",++mark);
}
}
¿¹Á¦ÀÇ ++ ¿¬»êÀÚ´Â originÇüÀÇ ¿°Å º¯¼ö¸¦ ´ÙÀ½°ªÀ¸·Î Áõ°¡½ÃŰµÇ ¸¶Áö¸· ¿°Å°ª ´ÙÀ½À» ¼±µÎÀÇ ¿°Å°ª°ú ¿¬°áÇÏ¿© ¼øÈ¯Çϵµ·Ï ÇÑ´Ù. ÀÌ ¿¬»êÀÚ°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é ¿°ÅÇü¿¡ ´ëÇØ¼´Â ++¿¬»êÀ» Àû¿ëÇÒ ¼ö ¾ø´Ù. ·çÇÁ¸¦ 7¹ø ½ÇÇàÇߴµ¥ NORTH ´ÙÀ½ °ªÀÌ EAST°¡ µÉ °ÍÀÌ´Ù.