[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]ÇüÀÌ Ç×»ó °¡´ÉÇÏ´Ù. µû¶ó¼ Ŭ·¡½ºÇüÀÇ ¹è¿Àº ¹°·Ð Ŭ·¡½ºÇüÀÇ Æ÷ÀÎ
Å͵µ °¡´ÉÇÏ´Ù. Ŭ·¡½ºÇü ¹è¿°ú Ŭ·¡½ºÇüÀÇ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ °£´ÜÇÑ ¿¹Á¦¸¦
ÀÛ¼ºÇغ¸ÀÚ.
ÀÌ¾î¼ °è¼ÓµË´Ï´Ù. ==============>>>>>>>
--------------------------------------------------------------------------------