[C++]2ºÎ°­ÁÂ(40)<--friend ¿¬»êÀÚ ÇÔ¼ö




********************************************************
********************************************************
4-2 friend ¿¬»êÀÚ ÇÔ¼ö


°¡. Ŭ·¡½º¿Í ±âÁ¸ µ¥ÀÌÅÍÀÇ ¿¬»ê

À̹ø¿¡´Â Time Ŭ·¡½º¿¡¼­ »ç¿ëµÈ + ¿¬»êÀÚÀÇ Àμö¸¦ ¹Ù²Ù¾î¼­ ½Ã°£³¢¸®°¡ ¾Æ
´Ñ ƯÁ¤ ½Ã°£¿¡ Á¤¼ö°ªÀ» ´õÇÏ´Â ¿¬»êÀÚ¸¦ ÀÛ¼ºÇغ¸ÀÚ. ¿¬»êÀÌ ²À °°Àº Á¾·ùÀÇ
µ¥ÀÌÅÍ Å¸ÀÔ³¢¸®¸¸ ÀÌ·ç¾îÁö¶ó´Â ¹ýÀº ¾ø´Ù.

#include <stdio.h>
#include <iostream.h>
class Time {
protected:
 int hour,min,sec;
public:
 void settime(int h,int m,int s) {
   hour=h;
   min=m;
   sec=s;
   return;
   }
 void outtime();
 Time operator +(int);
};
Time Time::operator +(int i)     // ½Ã°£°ú Á¤¼ö¸¦ ´õÇÏ´Â ¿¬»êÀÚ
{
sec +=i;                     // Ãʸ¦ ¸ÕÀú ´õÇÔ
while (sec>60) {             // ÃÊÀÇ ÀÚ¸®³ÑħÀ» ºÐÀ¸·Î ³Ñ±ä´Ù.
 min++;
 sec-=60;
 }
while (min>60) {             // ºÐÀÇ ÀÚ¸®³ÑħÀ» ½Ã°£À¸·Î ³Ñ±ä´Ù.
 hour++;
 min-=60;
 }
hour %= 12;
return (*this);              // ¿¬»ê °á°úÀÎ °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.
}
void Time::outtime(void)
{
cout << endl << "time is " << hour << " hour " << min
    << " minute " << sec << " second." << endl;
}
void main()
{
Time a;
a.settime(2,12,23);
a.outtime();
a=a+88;
a.outtime();
}

ÀÏ´Ü ¿¬»êÀÚ ÇÔ¼öÀÇ Àμö°¡ ¹Ù²î¾ú´Ù. TimeÇüÀÇ °´Ã¼¸¦ Àμö·Î ¹Þ¾ÆµéÀÌ´Â °Í
ÀÌ ¾Æ´Ï¶ó ´õÇÒ ½Ã°£À» ÃÊ ´ÜÀ§ÀÇ Á¤¼ö°ªÀ¸·Î ÀԷ¹޾ҴÙ. ¿¬»êÀÚ ÇÔ¼ö +ÀÇ ³»
ºÎµµ Àû´çÇÑ ÇüÅ·Π¼öÁ¤µÇ¾ú´Ù. Àμö nÀÌ Ãʸ¦ ÀǹÌÇϹǷΠ°´Ã¼ÀÇ sec¿Í µ¡¼À
À» ¸ÕÀú Çϸç secÀÇ ÀÚ¸®³Ñħ¿¡ ÀÇÇØ ºÐ°ú ½Ã°¡ º¯°æµÇµµ·Ï ÇÏ¿´´Ù. ÀÚ¸®³Ñħ
À» checkÇÏ´Â ºÎºÐµµ if¹®¿¡¼­ while¹®À¸·Î ¹Ù²î¾ú´Ù.
½Ã°£³¢¸®ÀÇ µ¡¼À¿¡¼­´Â ÀÚ¸®³ÑħÀÌ ±â²¯ÇØ¾ß 1¹ø¹Û¿¡ ÀϾ ¼ö°¡ ¾ø´Ù. 59ÃÊ
¿¡ 59Ãʸ¦ ´õÇغÁ¾ß ºÐ´ÜÀ§°¡ Áõ°¡ÇØ¾ß ÇÒ ¼ö´Â 1ºÐ¹Û¿¡ ¾ÈµÈ´Ù. ÇÏÁö¸¸ ÃÊ ´Ü
À§¸¸À¸·Î ½Ã°£À» ´õÇÒ ¶§´Â 60ÃÊ À̳»¸¸ ´õÇØÁø´Ù´Â º¸ÀåÀÌ ¾øÀ¸¸ç ÇöÀç ½Ã°£
¿¡ 200Ãʸ¦ ´õÇ϶óµç°¡ 3000Ãʸ¦ ´õÇ϶óµç°¡ Çϴ ǥÇöÀÌ °¡´ÉÇØ¾ß Çϱ⠶§¹®
¿¡ ÀÚ¸®³ÑħÀÌ ¾øÀ» ¶§±îÁö ¿©·¯ ¹ø üũÇØÁÖ¾î¾ß ÇÑ´Ù.
ÀÌ ¿¹Á¦¿¡¼­´Â ÀÚ¸®³ÑħÀ» üũÇϱâ À§ÇØ while ·çÇÁ¸¦ »ç¿ëÇÏ¿´´Âµ¥ ·çÇÁ´Â
´õÇØÁö´Â Á¤¼ö°ªÀÌ Å©¸é ¼Óµµ°¡ ¶³¾îÁö¹Ç·Î ´ÙÀ½°ú °°Àº Äڵ带 ½á¼­ Á»´õ ºü
¸¥ ¼Óµµ¸¦ ³¾ ¼ö ÀÖ´Ù.

long temp;
temp=hour*3600+min*60+sec+i;
sec=temp%60;
min=(temp/60)%60;
hour=(temp/3600)%12;

Àӽà º¯¼ö temp¸¦ »ç¿ëÇÏ¿© ÇöÀç ½Ã°£À» ÃÊ ´ÜÀ§·Î ¹Ù²Û ÈÄ¿¡ ÃʷκÎÅÍ ½Ã,
ºÐ, Ãʸ¦ ºÐ¸®Çس»´Â ¹æ¹ýÀÌ´Ù. ´õÇØÁö´Â Á¤¼ö°ªÀÌ Å¬ °æ¿ì´Â ·çÇÁ¸¦ ¿©·¯ ¹ø
µ¹°Ô µÇ¹Ç·Î ½ÇÇà ¼Óµµ°¡ ´À·ÁÁö°Ô µÇ´Âµ¥ ÀÌ·± ¿¬»ê½Ä¿¡ ÀÇÇØ ·çÇÁ¸¦ ¿©·¯ ¹ø
½ÇÇàÇÏ´Â °ÍÀ» ¹æÁöÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ´õÇØÁö´Â ÃÊ°¡ ÀÛÀ» °æ¿ì¿¡´Â ¿ÀÈ÷·Á
ÀÌ·± ¹æ¹ýÀÌ ´õ ´À·ÁÁú ¼öµµ ÀÖÀ¸¹Ç·Î ¾î¶² ¹æ¹ýÀ» ¾²´Â°¡´Â »óȲ¿¡ µû¶ó ÀûÀý
ÇÏ°Ô ¼±ÅÃÇÏ¸é µÉ °ÍÀÌ´Ù.

³ª. friend ÇÔ¼ö

½Ã°£°ú Á¤¼ö¸¦ ´õÇÏ´Â ¿¹Á¦¸¦ ´Ù½Ã Çѹø ´õ »ìÆ캸ÀÚ. ¿¬»êÀÚ ÇÔ¼ö¸¦ È£ÃâÇÏ
´Â ºÎºÐÀÌ a=a+88;·Î µÇ¾î ÀÖ´Ù. µ¡¼ÀÀº ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇϹǷΠa=a+88;ÀÌ °¡
´ÉÇÏ´Ù¸é ³í¸®»ó a=88+a;µµ °¡´ÉÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¸â¹ö ÇÔ¼ö·Î Á¤ÀÇµÈ ¿¬»êÀÚ
ÇÔ¼ö¿¡¼­´Â ÀÌ°ÍÀÌ ºÒ°¡´ÉÇÏ´Ù.
a=a+88À» ÇÔ¼ö È£Ãâ ±¸¹®À¸·Î °íÄ¡¸é a=a.operator +(88)ÀÌ µÈ´Ù. a °´Ã¼¿¡
Á¤ÀǵǾî ÀÖ´Â ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö +¸¦ Àμö 88À» »ç¿ëÇÏ¿© È£ÃâÇÏ°Ô µÇ¸ç ¸â¹ö
ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ¾Æ¹«·± ¹®Á¦¾øÀÌ ¿¬»êÀÌ ÀÌ·ç¾îÁø´Ù. a=88+a¸¦ ÇÔ¼ö
È£Ãâ ±¸¹®À¸·Î °íÄ¡¸é a=88.operator +(a)°¡ µÈ´Ù.
°ð, operator +°¡ 88À̶ó´Â °´Ã¼°¡ ¼Ò¼ÓµÇ¾î Àִ Ŭ·¡½º(int)ÀÇ ¸â¹ö ÇÔ¼ö¶ó
´Â ¾ê±â°¡ µÇ´Âµ¥ int¶ó´Â Ŭ·¡½º¿¡ Á¤ÀǵǾî ÀÖ´Â + ¿¬»êÀÚ´Â TimeÇüÀÇ °´Ã¼
¸¦ ÇÇ¿¬»êÀÚ·Î ÃëÇØ µ¡¼ÀÀ» ÇÒ ¼ö ÀÖ´Â ´É·ÂÀÌ ¾ø´Ù. a=88+a;¸¦ ±×´ë·Î ¾²´Ù°¡
´Â Illegal structure operation error°¡ ¹ß»ýÇÑ´Ù. ±×·¸´Ù°í Çؼ­ ¼öÇп¡¼­
¼º¸³ÇÏ´Â µ¡¼À ¿¬»êÀÇ ±³È¯¹ýÄ¢À» ¹«½ÃÇÒ ¼öµµ ¾ø´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­´Â °´Ã¼¿¡¼­ È£ÃâµÇ´Â ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö°¡ ¾Æ
´Ñ Ŭ·¡½º ¿ÜºÎ¿¡ µ¶¸³ÀûÀ¸·Î Á¸ÀçÇÏ´Â ¿¬»êÀÚ ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù. ¿¬»êÀÚ ÇÔ¼ö
°¡ ¸â¹ö ÇÔ¼öÀÏ °æ¿ì´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °´Ã¼°¡ ÀÚµ¿À¸·Î ù¹ø° ÇÇ¿¬»êÀÚ
°¡ µÇ¾î ¹ö¸®±â ¶§¹®¿¡ ¿¬»êÀÚ ÇÔ¼ö¸¦ Ŭ·¡½º ³»ºÎ¿¡ µÎ¾î¼­´Â ¹®Á¦¸¦ ÇØ°áÇÒ
¼ö ¾ø´Ù. Ŭ·¡½º ¿ÜºÎ¿¡ Á¸ÀçÇϸ鼭µµ Ŭ·¡½º ³»ºÎÀÇ ¸â¹ö¸¦ AccessÇÏ´Â ±ÇÇÑ
À» °®±â À§Çؼ­´Â ÀÌ·¯ÇÑ ¿¬»êÀÚ ÇÔ¼ö°¡ friend·Î ¼±¾ðµÇ¾î¾ß ÇÑ´Ù.
friend·Î ¼±¾ðµÈ ¿¬»êÀÚ ÇÔ¼ö´Â Ŭ·¡½º ¼Ò¼ÓÀÌ ¾Æ´Ï¸ç °´Ã¼¿¡ ÀÇÇØ È£ÃâµÇ´Â
°ÍÀÌ ¾Æ´Ï¹Ç·Î ÇÇ¿¬»êÀÚ¸¦ ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀ¸·Î °¡Áú ¼ö ÀÖ´Ù. ¶ÇÇÑ È£ÃâÇÏ´Â
°´Ã¼°¡ ÇÇ¿¬»êÀÚ°¡ µÇ¾î ÁÖÁö ¾ÊÀ¸¹Ç·Î ¿¬»êÀÚ°¡ °¡Á®¾ß ÇÒ °íÀ¯ÀÇ ÇÇ¿¬»êÀÚ
°³¼ö ¸¸Å­ÀÇ Àμö¸¦ °¡Á®¾ß ÇÑ´Ù. Áï ÀÌÇ× ¿¬»êÀÚ´Â µÎ °³ÀÇ Àμö¸¦, ´ÜÇ× ¿¬
»êÀÚ´Â ÇÑ °³ÀÇ Àμö¸¦ ²À °¡Á®¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------

    

 ´ÙÀ½