[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 ÇÔ¼ö È£Ãâ
}
ÀÌ¾î¼ °è¼ÓµË´Ï´Ù. ==============>>>>>>>
--------------------------------------------------------------------------------