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





¾×¼¼½º ÁöÁ¤Àڴ Ŭ·¡½º Á¤Àǹ® ³»¿¡ ³ªÅ¸³ª°Ô µÇ¸ç ´Ù¸¥ ¾×¼¼½º ÁöÁ¤ÀÚ°¡ ³ª
Ÿ³ª±â Àü¿¡´Â °è¼Ó À¯È¿ÇÏ´Ù. ´ÙÀ½À» º¸ÀÚ.

class KISS {
private:
 int a;   ¦¡¦¤ private ¼Ó¼º
 int b;   ¦¡¦¥
protected:
 double f;  protected ¼Ó¼º
public:
 int Geta();    ¦¡¦¤
 int Getb();      ¦¢public ¼Ó¼º
 KISS(int,int); ¦¡¦¥
};
  
¾×¼¼½º ÁöÁ¤¿¡ ÀÇÇØ ¸â¹öÀÇ ¾×¼¼½º°¡ ´ÙÀ½°ú °°ÀÌ ÅëÁ¦µÈ´Ù.

class ABC {
  private:         // ºñ °ø°³ºÎ ¸â¹ö
    int a;
    void outa();
  public:          // °ø°³ºÎ ¸â¹ö
    int b;
    void outb();
};
void func()
{
ABC obj;
obj.b=3;           // ÂüÁ¶ °¡´É
obj.outb();        // È£Ãâ °¡´É
obj.a=3;           // ÂüÁ¶ ºÒ°¡´É
obj.outa();        // È£Ãâ ºÒ°¡´É
}

¾×¼¼½º ÁöÁ¤ÀÚ´Â ÇÊ¿ä¿¡ µû¶ó ¿©·¯ ¹ø Áߺ¹µÇ¾î ³ªÅ¸³ªµµ »ó°ü¾ø´Ù. private:
°¡ ¸ÕÀú ³ª¿À°í public:ÀÌ ³ª¿Â ÈÄ ´Ù½Ã private:°¡ ±× µÚ¿¡ ³ª¿Íµµ »ó°üÀÌ ¾ø
À¸¸ç ²À ÇÑ°÷¿¡ ¸ðÀ» ÇÊ¿ä´Â ¾ø´Ù´Â ¾ê±â´Ù. ±×·¯³ª °¡±ÞÀûÀÌ¸é ³­ÀâÇÏ°Ô ¿©·¯
±ºµ¥¿¡ ¾µ ÇÊ¿ä°¡ ¾øÀ¸¸ç ±ò²ûÇÏ°Ô ÇÑ°÷¿¡ ¸ðÀ¸´Â ÆíÀÌ º¸±â¿¡ ÁÁ´Ù. ´ÙÀ½ÀÇ
¿¹µµ ÁÂÃøº¸´Ù´Â ¿ìÃøÀÌ ´õ ±ò²ûÇغ¸ÀδÙ.

class KISS {
private:
int a;
double f;
public:
KISS();
void printfdata();
private:
int posx,posy;
};

class KISS {
private:
int a;
double f;
int posx,posy;
public:
KISS();
void printfdata();
};

±×·³ ¾×¼¼½º ±ÇÇÑ ÁöÁ¤À» ÇÏÁö ¾ÊÀº °æ¿ìÀÇ ¾×¼¼½º ±ÇÇÑÀº ¾î¶»°Ô µÇ´Â °¡.
´ÙÀ½ µÎ °æ¿ì¸¦ ºñ±³Çغ¸ÀÚ.

class ABC {
int a;
void outa();
};
struct DEF {
int a;
void outa();
};

Ưº°ÇÑ ÁöÁ¤À» ÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â ¾ðÁ¦³ª ±×·¸µíÀÌ µðÆúÆ®°¡ Àû¿ëµÈ´Ù. ±×·±
µ¥ µðÆúÆ® ¾×¼¼½º ±ÇÇÑ ÁöÁ¤ÀÌ ±¸Á¶Ã¼¿Í Ŭ·¡½ºÀÇ °æ¿ì °¢°¢ ´Ù¸£´Ù. ±¸Á¶Ã¼ÀÎ
°æ¿ì´Â ¸â¹ö ¿¬»êÀÚ¸¸ ÅëÇÑ´Ù¸é ¾ðÁ¦³ª ¾îµð¼­³ª ´©±¸µçÁö ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö
ÀÖ´Ù. ¶ÇÇÑ Æ¯º°È÷ private: ¶ó°í ÁöÁ¤À» ÇÏ¸é ¼û±æ ¼öµµ ÀÖ´Ù. Áï, ±¸Á¶Ã¼ÀÇ
°æ¿ì µðÆúÆ® ¾×¼¼½º ÁöÁ¤ÀÚ°¡ public:ÀÌ´Ù. ¹Ý¸é Ŭ·¡½º´Â ¿ø·¡ µ¥ÀÌÅ͸¦ ¼û±â
´Â Ư¡ÀÌ ÀÖÀ¸¹Ç·Î µðÆúÆ®°¡ privateÀÌ´Ù. ¾×¼¼½º ±ÇÇÑ ÁöÁ¤À» ÇÏÁö ¾Ê°í ¸â
¹ö¸¦ Á¤ÀÇÇÒ °æ¿ì Ŭ·¡½º ³»ÀÇ ¸â¹ö´Â Ŭ·¡½º ¿ÜºÎ¿¡¼­´Â Àý´ë °Çµå¸± ¼ö°¡ ¾ø
´Ù.
À§¿¡¼­ µç ¿¹¿¡¼­ Ŭ·¡½º ABC¿¡ ¼ÓÇÑ a,outa() µîÀÇ ¸â¹ö´Â private ¼Ó¼ºÀ»
°®°Ô µÇ¸ç struct DEF¿¡ ¼ÓÇÑ a,outa() µîÀÇ ¸â¹ö´Â public ¼Ó¼ºÀ» °®°Ô µÈ´Ù.
Ŭ·¡½º¿Í ±¸Á¶Ã¼ÀÇ À¯ÀÏÇÑ Â÷ÀÌ´Â ¹Ù·Î ÀÌ µðÆúÆ® ¾×¼¼½º ÁöÁ¤ÀÌ ´Ù¸£´Ù´Â Á¡
¹Û¿¡ ¾ø´Ù.
¾×¼¼½º ÁöÁ¤À» ÇÏ´Â µ¥µµ ÀÏÁ¾ÀÇ °üÇàÀÌ ÀÖ´Ù. ¾î¶°ÇÑ °üÇàÀÌ³Ä Çϸé ÁÖ·Î µ¥
ÀÌÅÍ ¸â¹ö´Â private·Î ¼±¾ðÇÏ¿© ³»ºÎÀûÀ¸·Î ¼û±â°í ¸â¹ö ÇÔ¼ö´Â publicÀ¸·Î
¼±¾ðÇÏ¿© ¿ÜºÎÀûÀ¸·Î °ø°³ÇÑ´Ù. µ¥ÀÌÅÍ´Â ¼û°Ü¼­ ÇԺηΠ¹Ù²îÁö ¾Êµµ·Ï ÇϵÇ
µ¥ÀÌÅ͸¦ Á¶ÀÛÇÏ´Â ÇÔ¼ö´Â °ø°³ÇÏ¿© µ¥ÀÌÅ͸¦ ¾×¼¼½º ÇÒ ÇÊ¿ä°¡ ÀÖÀ»  ¶§´Â ¸â
¹ö ÇÔ¼ö¸¦ ÅëÇϵµ·Ï ÇÑ´Ù. ÀÌ·¯ÇÑ °ü·Ê¿¡ µû¶ó ¾Õ¿¡¼­ ÀÛ¼ºÇß´ø Position Ŭ·¡
½º¸¦ ´Ù½Ã ÀÛ¼ºÇغ¸¸é ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÌ´Ù.

class Position {
private:
 int px;
 int py;
 char ch;
public:
 Position();
 void outpos();
 int Getpx() {retrun px;}      // px°ªÀ» Àд ÇÔ¼ö
 int Getpy() {return py;}      // py°ªÀ» Àд ÇÔ¼ö
 };

µ¥ÀÌÅÍ ¸â¹ö´Â ¼û±â°í ¸â¹ö ÇÔ¼ö´Â ¸ðµÎ °ø°³ÇÏ¿´´Ù. »õ·Î Ãß°¡µÈ µÎ °³ÀÇ ¸â
¹ö ÇÔ¼ö´Â ¼û°ÜÁ® ÀÖ´Â µ¥ÀÌÅÍ ¸â¹ö¸¦ ¿ÜºÎ¿¡ º¸¿©ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ·¸°Ô
ÇÏ¸é ¿ÜºÎ¿¡¼­ px°ªÀÌ ÇÊ¿äÇϸé Getpx()ÇÔ¼ö¸¦ È£ÃâÇؼ­ ±× °ªÀ» ¾òÀ» ¼ö ÀÖ´Ù.
±×·¯³ª ÇÔ¼ö·Î px°ªÀ» ¹Ù²Ü ¼ö´Â ¾ø´Ù. Getpx()¿Í °°ÀÌ °£´ÜÇÑ ÇÔ¼ö´Â ÀÌ·¸°Ô
Ŭ·¡½º ³»¿¡¼­ °ð¹Ù·Î Á¤ÀÇÇÏ¿© inlineÀ¸·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ ¿©·¯ ¸é¿¡¼­ À¯¸®ÇÏ
´Ù.

**********************************************
**********************************************
2-5 friend ÇÔ¼ö

Ŭ·¡½ºÀÇ ¸â¹öµéÀº ¾×¼¼½º ±ÇÇÑ ÁöÁ¤¿¡ ÀÇÇØ Å¬·¡½º ¹ÛÀ¸·ÎÀÇ °ø°³ ¿©ºÎ¸¦ °á
Á¤ÇÑ´Ù°í  Çß´Ù. ±× Áß¿¡¼­ ƯÈ÷ private ¼Ó¼ºÀ» °¡Áø ¸â¹ö´Â Ŭ·¡½ºÀÇ ¸â¹ö
ÇÔ¼ö¸¸ÀÌ ¾×¼¼½º°¡ °¡´ÉÇÏ´Ù°í Çß´Ù. ÀÌ·¸°Ô ¸â¹ö¸¦ ¼û±â´Â ÀÌÀ¯´Â ¹°·Ð ¼û±â
¸é ¿©·¯ °¡Áö Æí¸®ÇÔ°ú ¾ÈÀü¼ºÀÌ º¸ÀåµÇ±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¶§¶§·Î´Â ÀÌ·± ½Ä
À¸·Î ¸â¹ö¸¦ ¼û±â´Â °ÍÀÌ ºÒÆíÇØÁú ¶§µµ ÀÖ´Ù.
±×·¡¼­ ¾×¼¼½º ±ÇÇÑ ÁöÁ¤ÀÇ ¿¹¿Ü¸¦ ¸¸µé¾î µÎ°í Ưº°ÇÑ °æ¿ì¿¡ ÇÑÇؼ­ Ŭ·¡½º
³»ÀÇ private ¼Ó¼º ¸â¹ö¸¦ °ø°³ÇÑ´Ù. ±× ¿¹¿Ü°¡ ¹Ù·Î friend ÇÔ¼öÀÌ´Ù. ƯÁ¤
Ŭ·¡½ºÀÇ friend·Î ÁöÁ¤µÈ ÇÔ¼ö´Â ºñ·Ï Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ ¾Æ´Ï´õ¶óµµ Ŭ·¡
½º ³»ÀÇ private ¼Ó¼ºÀ» °¡Áø ¸â¹ö¸¦ ¸¶À½´ë·Î ¾×¼¼½ºÇÒ ¼ö Àִ Ư±ÇÀ» °¡Áö
°Ô µÈ´Ù.
¾î¶² ÇÔ¼ö¸¦ friend ÇÔ¼ö·Î ¸¸µé±â À§Çؼ­´Â Ŭ·¡½º Á¤Àǹ® ³»¿¡ ±× ÇÔ¼öÀÇ
¿øÇüÀ» ¹àÇôÁÖµÇ ¿øÇü ¾Õ¿¡ friend¶ó´Â Å°¿öµå¸¦ ½áÁØ´Ù. void func¶ó´Â ÇÔ¼ö
¸¦ KISS¶ó´Â Ŭ·¡½ºÀÇ friend·Î ÁöÁ¤ÇÏ°íÀÚ ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

class KISS {
     .
     .
 friend void func();
     .
     .
 };

ÀÌ ÁöÁ¤¿¡ ÀÇÇØ func ÇÔ¼ö´Â ¾ÕÀ¸·Î KISS Ŭ·¡½º¿¡ ¼ÓÇÑ ¾î¶² ¸â¹öµçÁö ¾×¼¼½º
ÇÒ ¼ö Àִ Ư±ÇÀ» °¡Áö°Ô µÇ¾ú´Ù. friend ÇÔ¼ö ¼±¾ðÀº Ŭ·¡½º ³»ÀÇ private
¿µ¿ªÀ̳ª public ¿µ¿ª ¾Æ¹« °÷¿¡³ª À־ µÇ¸ç Ŭ·¡½º ¼±¾ð ºí·° ³»ºÎ¸é ¾îµð
µçÁö »ó°ü¾ø´Ù. ½ÇÁ¦ friend ÇÔ¼ö¸¦ »ç¿ëÇÑ ¿¹¸¦ º¸ÀÚ.

#include <iostream.h>
#include <conio.h>
class Position {
 private:
   int px;
   int py;
   char ch;
 public:
   Position(int x,int y,int c)
     {px=x; py=y; ch=c; }
   friend void outpos(Position &);      // friend ÇÔ¼ö ÁöÁ¤
 };
void outpos(Position  &pos)  // ÀÏ¹Ý  ÇÔ¼öÁö¸¸ Position class³»ÀÇ
 {                              // ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.
 gotoxy(pos.px,pos.py);
 putch(pos.ch);
 }
void main()
 {
 clrscr();
 Position HERE(40,12,'C');
 outpos(HERE);                          // freind ÇÔ¼ö È£Ãâ
 }


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


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