[C++]°­ÁÂ(17)<--friendÇÔ¼ö





ÀÌ ¿¹Á¦¿¡¼­ outpos¶ó´Â ÇÔ¼ö¸¦ Position Ŭ·¡½ºÀÇ friend ÇÔ¼ö·Î Á¤ÀÇÇÏ¿´´Ù.
outpos´Â Position Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö´Â ¾Æ´Ï¸ç Ŭ·¡½º¿Í´Â º°µµ·Î Á¸ÀçÇÏ´Â
ÇÔ¼öÀÌ´Ù. ÇÏÁö¸¸ friend·Î ÁöÁ¤µÇ¾ú±â ¶§¹®¿¡ outposÀÇ º»Ã¼¿¡¼­ ¾ó¸¶µçÁö Po
sition Ŭ·¡½ºÀÇ ¸â¹öÀÎ px, py¸¦ ÀÐ°í ¾µ ¼ö ÀÖ´Ù. ºñ·Ï px, py ¸â¹ö°¡ priva
te ¼Ó¼ºÀ» °¡Áö°í Ŭ·¡½º ¿ÜºÎ·Î´Â °ø°³µÇÁö ¾ÊÁö¸¸ outpos ÇÔ¼ö´Â °ø°³µÇÁö
¾Ê´Â ¸â¹ö¸¦ °Çµå¸± ¼ö Àִ Ư±ÇÀ» °¡Áö°í ÀÖ´Â °ÍÀÌ´Ù. outpos ÇÔ¼ö¸¦ friend
ÇÔ¼ö·Î ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ¾î¶»°Ô µÇ´ÂÁö »ìÆ캸±â À§ÇØ 11ÇàÀÇ friend ¼±¾ðÀ»
ÁÖ¼®¹®À¸·Î ¸¸µé¾î µÎ°í ÄÄÆÄÀÏÀ» ½ÃÄÑ º¸¾Æ¶ó. ¾Æ¸¶ ½ÇÇàÀº °í»çÇÏ°í ÄÄÆÄÀÏ
Á¶Â÷ µÇÁö ¾Ê¾Æ ´ÙÀ½°ú °°Àº ¿¡·¯ ¸Þ½ÃÁöµéÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.

 Compiling EX18-7.CPP:
 Error EX18-7.CPP 15: 'Position::px' is not accessible
 Error EX18-7.CPP 15: 'Position::py' is not accessible
 Error EX18-7.CPP 16: 'Position::ch' is not accessible
 Warning EX18-7.CPP 17: Parameter 'pos' is never used
   
outpos°¡ ´õÀÌ»ó Position Ŭ·¡½ºÀÇ private ¼Ó¼ºÀ» °¡Áø ¸â¹ö ÇÔ¼ö¸¦ ¾×¼¼½º
ÇÒ ¼ö Àִ Ư±ÇÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. firend ÇÔ¼ö°¡ »ç¿ëµÇ´Â ¿¹¸¦ Çϳª ´õ »ìÆì
º¸ÀÚ.

#include <iostream.h>
#include <conio.h>
class Time {
 private:
   int hour,min,sec;
 public:
   Time(int h,int m,int s)
     { hour=h; min=m; sec=s; }
   friend void outnow(class Date &,class Time &);  // friend ¼±¾ð
 };
class Date {
 private:
   int year,month,day;
 public:
   Date(int y,int m,int d)
     { year=y; month=m; day=d; }
   friend void outnow(Date &,Time &);     // friend ¼±¾ð
 };
void outnow(Date& nd,Time& nt)   // µÎ class¸¦ ¸ðµÎ ¾×¼¼½º °¡´É
{
 cout << nd.year << " year " << nd.month << " month "
      << nd.day << " day " << '\n';
 cout << nt.hour << " si " << nt.min << " bun " << nt.sec
      << " cho " << '\n';
}
void main()
{
 Time nowtime(12,58,28);
 Date nowdate(1993,5,8);
 clrscr();
 outnow(nowdate,nowtime);
}

ÀÌ ¿¹Á¦¿¡¼­´Â ½Ã°£À» ³ªÅ¸³»´Â Time Ŭ·¡½º¿Í ³¯Â¥¸¦ ³ªÅ¸³»´Â Date Ŭ·¡½º¸¦
Á¤ÀÇÇÏ°í ÀÖÀ¸¸ç µÎ °³ÀÇ Å¬·¡½º°¡ ¸ðµÎ ´Ù ÀÚ½ÅÀÇ µ¥ÀÌÅÍ ¸â¹ö¸¦ ¼û±â°í ÀÖ´Ù.
±×·±µ¥ ½Ã°£°ú ³¯Â¥¸¦ µ¿½Ã¿¡ Ãâ·ÂÇØÁÖ´Â ÇÔ¼ö outnow°¡ ÇÊ¿äÇÏ´Ù°í ÇÒ ¶§ out
now´Â TimeÀÇ ¸â¹ö ÇÔ¼ö°¡ µÇ¾î¼­µµ °ï¶õÇÏ°í DateÀÇ ¸â¹ö ÇÔ¼ö°¡ µÇ¾î¼­µµ °ï
¶õÇÏ´Ù. Time Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ µÈ´Ù¸é ½Ã°£À» Ãâ·ÂÇÏ´Â µ¥´Â ¹®Á¦°¡ ¾øÁö
¸¸ ³¯Â¥¸¦ Ãâ·ÂÇÒ ¼ö°¡ ¾ø°í µ¥ÀÌÅÍ Å¬·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ µÇ¸é ±× ¹Ý´ëÀÇ Çö
»óÀÌ ÀϾ´Ù. ±×·¡¼­ outnow¶ó´Â ÇÔ¼ö¸¦ ¾çÂÊ ¾îµð¿¡µµ ¼ÓÇÏÁö ¾Ê´Â ÀÏ¹Ý ÇÔ
¼ö·Î ¸¸µé¾î µÎ°í ¾çÂÊ Å¬·¡½ºÀÇ friend ÇÔ¼ö·Î Á¤ÀÇÇÑ´Ù. ±×·¯¸é ºñ·Ï outnow
´Â Time Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öµµ ¾Æ´Ï°í Date Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öµµ ¾Æ´ÏÁö¸¸ ¾ç
ÂÊ Å¬·¡½ºÀÇ private ¼Ó¼ºÀ» °¡Áø ¸ðµç ¸â¹öµéÀ» ´Ù ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.
ÀÌ µÎ ¿¹Á¦¸¦ ÀÌÇØÇÏ¿´´Ù¸é friend ÇÔ¼ö¶õ °ú¿¬ ¾î¶² Ư¡À» °¡Áø ÇÔ¼öÀΰ¡¸¦
¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ À§¿¡¼­ µç ¿¹Á¦µéÀº friend ÇÔ¼öÀÇ °³³äÀ» ±ú¿ìÄ¡
±â À§ÇØ ÀϺη¯ ¸¸µç °Í »ÓÀÌÁö ¿ø·¡ friend ÇÔ¼öÀÇ ¿ëµµ°¡ ±×·± °ÍÀº ¾Æ´Ï´Ù.
¾Õ¿¡¼­ µç [¿¹Á¦  18-7]Àº outpos ÇÔ¼ö°¡ friend·Î ÁöÁ¤µÇ´Â °Íº¸´Ù´Â Â÷¶ó¸®
Position Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ µÇ´Â ÆíÀÌ ´õ ¹Ù¶÷Á÷ÇÏ´Ù. ±×¸®°í [¿¹Á¦ 2-8]
Àº friend ÇÔ¼ö°¡ ¾Æ´Ï¾îµµ ¾ó¸¶µçÁö ÇØ°áÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ friend ÇÔ¼ö¸¦ »ç
¿ëÇϱâ À§ÇØ ¸¸µç °Í »ÓÀÌ´Ù. ½Ã°£À» Ãâ·ÂÇÏ´Â outtime ÇÔ¼ö¸¦ Time Ŭ·¡½ºÀÇ
¸â¹ö ÇÔ¼ö·Î ¸¸µé°í ³¯Â¥¸¦ Ãâ·ÂÇÏ´Â outdate ÇÔ¼ö¸¦ Date Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö
·Î ¸¸µé¾î µÎ°í ÀÌ µÎ ÇÔ¼ö°¡ ¸ðµÎ public ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Ù¸é outnow´Â ´Ù
À½°ú °°ÀÌ µÉ °ÍÀÌ´Ù.

void outnow(Date &nd,Date &nt)
{
nd.outdate();
nt.outtime();
}

outnow¸¦ friend·Î ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ outdate(), outtime()ÀÌ public ¼Ó¼ºÀ» °¡
Áö°í ÀÖÀ¸¹Ç·Î ³¯Â¥¿Í ½Ã°£À» µ¿½Ã¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ ¾ó¸¶µçÁö °¡´ÉÇÏ´Ù. ¿©±â
¼­ º¸ÀÎ ¿¹Á¦µéÀº friend ÇÔ¼öÀÇ °³³äÀ» ±ú¿ìÄ¡¶ó°í ¸¸µç ¿¹Á¦¿¡ ºÒ°úÇÏ´Ù. fr
iend ÇÔ¼ö°¡ ¾ðÁ¦ ±× À§·ÂÀ» ¹ßÈÖÇÏ´Â °¡´Â Çö ´Ü°è¿¡¼­´Â ¼³¸íÀÌ ¾î·Á¿ì¹Ç·Î
¿©±â¼­´Â °³³ä¸¸ ¾Ë°í °¡µµ·Ï ÇÏÀÚ. friend ¼Ó¼ºÀº ÇÔ¼ö¿¡¸¸ Àû¿ëµÇ´Â °ÍÀÌ ¾Æ
´Ï°í Ŭ·¡½º¿¡µµ Àû¿ëµÉ ¼ö ÀÖ´Ù. classA°¡ classBÀÇ friend Ŭ·¡½º°¡ µÇ¸é cl
assA¿¡ ÀÖ´Â ¸ðµç ¸â¹ö ÇÔ¼ö´Â classBÀÇ ¸ðµç private ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ
´Ù. À̶§ classsA´Â classBÀÇ friend Ŭ·¡½ºÀÌ´Ù ¶ó°í ÇÑ´Ù. classA¸¦ classB
ÀÇ friend Ŭ·¡½º·Î ÁöÁ¤Çϱâ À§Çؼ­´Â classBÀÇ Å¬·¡½º Á¤Àǹ®¿¡ classA°¡ fr
iendÀÓÀ» ¹àÈ÷¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ Å¬·¡½º°¡ ¾î¶»°Ô friend·Î ÁöÁ¤µÇ´Â
Áö º¸ÀÚ.

#include <iostream.h>
#include <conio.h>
class Time {                    // Time classÀÇ Á¤ÀÇ
 private:
   int hour,min,sec;
 public:
   Time(int h,int m,int s)
     { hour=h; min=m; sec=s; }
   friend class Date;           // friend classÀÇ ¼±¾ð
 };  
class Date {                     // Date classÀÇ Á¤ÀÇ
 private:
   int year,month,day;
 public:
   Date(int y,int m,int d)
     { year=y; month=m; day=d; }
   void outnow(Time &nt);
 };
void Date::outnow(Time& nt)      // Time classÀÇ data ¸â¹ö¸¦
{                                // ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù.
 cout << year << " year " << month << " month "
      << day << " day " << '\n';
 cout << nt.hour << " si " << nt.min << " bun " << nt.sec
      << " cho " << '\n';
}
void main()
{
 Time nowtime(12,58,28);
 Date nowdate(1993,5,8);
 clrscr();
 nowdate.outnow(nowtime);
}

¿ª½Ã ¸¶Âù°¡Áö·Î ½Ã°£°ú ³¯Â¥¸¦ µ¿½Ã¿¡ Ãâ·ÂÇÏ´Â ¿¹Á¦ÀÌ´Ù. ¾ÕÀÇ ¿¹Á¦¿Í ´Ù¸¥
Á¡Àº outnow°¡ Date Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ µÇ¾ú´Ù´Â Á¡ÀÌ´Ù. À§ ¿¹Á¦¿¡¼­´Â ou
tnow ÇÔ¼ö¿¡ ´ëÇØ friend·Î ÁöÁ¤À» ÇÑ °ÍÀÌ ¾Æ´Ï¶ó outnow°¡ ¼Ò¼ÓµÇ¾î ÀÖ´Â Da
te Ŭ·¡½º Àüü°¡ friend·Î ÁöÁ¤µÇ¾î ÀÖ´Ù. ÇÔ¼ö°¡ friend·Î ÁöÁ¤µÇµç Ŭ·¡½º
Àüü°¡ friend·Î ÁöÁ¤µÇµç °á°ú´Â ¸¶Âù°¡ÁöÀÌ´Ù. ´ÜÁö Ŭ·¡½º°¡ friend°¡ µÇ´Â
°ÍÀÌ Á¶±Ý ¹üÀ§°¡ ³ÐÀ» »ÓÀÌ´Ù. ÀÌ ¿¹Á¦µµ ¾Õ¿¡¼­ µé¾ú´ø ¿¹Á¦¿Í ¸¶Âù°¡Áö·Î
±»ÀÌ friend¸¦ ¾²Áö ¾Ê¾Æµµ ÇØ°áµÈ´Ù. Ŭ·¡½º¸¦ friend·Î ÁöÁ¤ÇÏ´Â °ÍÀº Ŭ·¡
½º³¢¸®ÀÇ µ¥ÀÌÅÍÇü º¯È¯¿¡ »ç¿ëµÇ´Âµ¥ ÀÌ°ÍÀº ÇÑÂü µÞºÎºÐ¿¡¼­ ¾ð±ÞÇÑ´Ù. ¿©±â
¼­´Â friendÀÇ ¶æ¸¸ ¾Ë°í ³Ñ¾î°¡¸é º°Å»ÀÌ ¾ø´Ù.


**********************************************
**********************************************
2-6 Ŭ·¡½º ¹è¿­ ¹× Æ÷ÀÎÅÍ


Ŭ·¡½º¶õ ÇϳªÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ÇϳªÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ ÀÖÀ» °æ¿ì ¾ðÁ¦³ª
±× µ¥ÀÌÅÍ Å¸ÀÔÀÇ ¹è¿­°ú Æ÷ÀÎÅÍ°¡ »ý¼º°¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î XÇüÀÌ ÀÖ´Ù¸é X *
Çü, X[n]ÇüÀÌ Ç×»ó °¡´ÉÇÏ´Ù. µû¶ó¼­ Ŭ·¡½ºÇüÀÇ ¹è¿­Àº ¹°·Ð Ŭ·¡½ºÇüÀÇ Æ÷ÀÎ
Å͵µ °¡´ÉÇÏ´Ù. Ŭ·¡½ºÇü ¹è¿­°ú Ŭ·¡½ºÇüÀÇ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ °£´ÜÇÑ ¿¹Á¦¸¦
ÀÛ¼ºÇغ¸ÀÚ.


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


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