[C++]°­ÁÂ(7)<--»õ¹®¹ý



**********************************************
**********************************************
1-4 ÷°¡µÈ ±â´É

°¡. ÂüÁ¶È£Ãâ

ÂüÁ¶ÀÚ´Â ´Ù¸¥ º¯¼ö¿¡ ´ëÇÑ ¶Ç ´Ù¸¥ À̸§ÀÌ¸ç º°Äª(alias)ÀÌ´Ù. ¶È°°Àº ¸Þ¸ð
¸® ¹øÁö¸¦ µÎ°³ÀÇ º¯¼ö°¡ µ¿½Ã¿¡ °¡Áö°Ô µÈ´Ù. ¸¸¾à ÂüÁ¶ÀÚ°¡ °¡¸®Å°´Â º¯¼öÀÇ
°ªÀÌ º¯Çϸé ÂüÁ¶ÀÚµµ º¯ÇÏ°Ô µÇ°í ¹Ý´ëÀÇ °æ¿ìµµ ¼º¸³ÇÑ´Ù. ÂüÁ¶ÀÚÀÇ ¼±¾ðÀº
´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

type &ÂüÁ¶ÀÚ=ÃʱⰪ;

¿©±â¼­ »ç¿ëµÈ &¸¦ ÂüÁ¶ ¼±¾ðÀÚ(reference declarator)¶ó°í ÇÏ¸ç º¯¼öÀÇ ¹øÁö
¸¦ ±¸ÇÏ´Â &¿¬»êÀÚ³ª, ºñÆ® AND ¿¬»êÀ» ÇÏ´Â & ¿¬»êÀÚ¿Í´Â ´Ù¸¥ °ÍÀÌ´Ù. ´ÙÀ½
¿¹Á¦¸¦ º¸°í ÂüÁ¶ÀÚÀÇ ±âº» ¹®¹ýÀ» ÀÍÈ÷µµ·Ï ÇÏÀÚ.

#include <iostream.h>
#include <stdio.h>

void main()
{
 int i;
 int &j = i;               // ÂüÁ¶ÀÚÀÇ ¼±¾ð
 i = 3;
 cout << "i is " << i << ", j is " << j << endl;
 j = 5;
 cout << "i is " << i << ", j is " << j << endl;
 printf( "%p\n", &i);      // ÁÖ¼Ò¸¦ Ãâ·Â
 printf( "%p\n", &j);
}

j¸¦ iÀÇ ÂüÁ¶ÀÚ·Î ¼±¾ðÇÏ°í ÀÖ´Ù. Ãâ·Â °á°ú´Â ´ÙÀ½°ú °°´Ù.

i is 3, j is 3
i is 5, j is 5
8FA9:0FFE
8FA9:0FFE

i°ªÀÌ º¯Çϸé j°ªµµ º¯ÇÏ°í j°ªÀÌ º¯Çϸé i°ªµµ º¯ÇÑ´Ù. À̸§ÀÌ ´Ù¸¦ »ÓÀÌÁö
°°Àº ´ë»óÀ» °¡¸®Å°°í ÀÖÀ¸¹Ç·Î ¾î¶² ÇÑ º¯¼ö¿¡ Á¶ÀÛÀ» °¡ÇÏ¸é ³ª¸ÓÁö ÇÑ º¯¼ö
µµ ¿µÇâÀ» ¹Þ°Ô µÈ´Ù.
±×¸®°í µÎ º¯¼ö°¡ °°Àº ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖ´Â °°Àº º¯¼öÀÓÀ» º¸À̱â À§ÇØ µÎ
º¯¼öÀÇ ¸Þ¸ð¸® ¹øÁö¸¦ Á¶»çÇØ º¸¾Ò´Ù. ¿ª½Ã °°Àº ¸Þ¸ð¸® ¹øÁö¸¦ °¡Áø´Ù.
ÂüÁ¶ÀÚ´Â »ý¼ºÀÌ µÊ°ú ´õºÒ¾î ¾î¶°ÇÑ º¯¼öÀÇ º°¸íÀ¸·Î »ç¿ëµÇ¹Ç·Î »ý¼º½Ã¿¡
¹Ýµå½Ã ÃʱâÈ­µÇ¾î¾ß ÇÑ´Ù. ÀÏ¹Ý º¯¼öó·³ ¼±¾ð°ú Á¤ÀǸ¦ ºÐ¸®ÇÏ¿© ½ÇÇàÇÒ ¼ö
°¡ ¾ø´Ù. ¸¸¾à À§ÀÇ ¿¹Á¦¿¡¼­ int &j;¶ó°í ¸ÕÀú ¼±¾ðÀ» ÇÑ ÈÄ j = i¶ó°í ÇÑ´Ù
¸é j°¡ »ý¼ºµÉ¶§ °¡¸®Å°´Â ´ë»óÀÌ ¾øÀ¸¹Ç·Î ´ÙÀ½°ú °°Àº ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ
´Ù. int &j;¶ó´Â ¹®Àå ÀÚü°¡ ¼º¸³µÇÁö ¾Ê´Â´Ù.

reference value 'j' must be initialized

ÂüÁ¶ÀÚ¸¦ ÃʱâÈ­½ÃÄÑ ÁÖ´Â °ÍÀÌ °ð ÂüÁ¶ÀÚ¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ÂüÁ¶ÀÚ´Â Ãʱâ
È­½Ä°ú ´ëÀÔ½ÄÀÇ Àǹ̰¡ ÀÏ¹Ý º¯¼ö¿Í´Â ´Þ¸® ¾ÆÁÖ Æ¯º°³ª´Ù.

ÃʱâÈ­ : ¾î¶² º¯¼ö¸¦ °¡¸®Å°°Ô µÉÁö¸¦ ÁöÁ¤ÇÑ´Ù.
´ëÀÔ½Ä : ÂüÁ¶ÀÚ°¡ °¡¸®Å°´Â º¯¼öÀÇ °ªÀ» º¯°æ½ÃŲ´Ù.

´ÙÀ½ ±¸¹®À» º¸ÀÚ.

int i = 4;
int k = 5;
int &j = i;    // ÃʱâÈ­
j = k;         // ´ëÀÔ

ÂüÁ¶ÀÚ j¸¦ ¼±¾ðÇϸ鼭 iÀÇ ¹øÁö¸¦ °¡¸®Å°µµ·Ï ÃʱâÈ­ÇÏ¿´À¸¸ç ÀÌÈĺÎÅÍ j¿Í i
´Â °°Àº º¯¼öÀÌ´Ù. ÇÁ·Î±×·¥ Áß°£¿¡ j¸¦ i°¡ ¾Æ´Ñ k¸¦ °¡¸®Å°µµ·Ï ¹Ù²Ù°í ½Í´Ù
°í ÇÏ¿© j = k¿Í °°ÀÌ ¾µ¼ö´Â ¾ø´Ù. ¿Ö³ÄÇϸé ÂüÁ¶ÀÚ´Â Çѹø ÃʱâÈ­µÇ¸é ´Ù¸¥
´ë»óÀ» °¡¸®Å³ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.
j = k¶ó´Â ´ëÀÔ½ÄÀº j°¡ °¡¸®Å°´Â ´ë»óÀ» k°¡ °¡Áø °ªÀ¸·Î ¹Ù²Ù´Â ´ëÀÔ½ÄÀÌ´Ù.
Áï j = k¿¡ ÀÇÇØ j´Â ¿©ÀüÈ÷ i¸¦ °¡¸®Å°°í ÀÖÀ¸¸ç i°ªÀÌ k°¡ °¡Áø 5·Î º¯°æµÈ
´Ù. ÂüÁ¶ÀÚ´Â ¼±¾ð°ú µ¿½Ã¿¡ ¹Ýµå½Ã ÃʱâÈ­µÇ¾î¾ß ÇÏÁö¸¸ ¾ðÁ¦³ª ±×·¸µíÀÌ ¿¹
¿Ü´Â ÀÖ´Ù.

* classÀÇ ¸â¹ö·Î¼­ ¼±¾ðµÉ ¶§´Â ¼±¾ð½Ã¿¡ ÃʱâÈ­µÇÁö ¾Ê°í »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­
µÈ´Ù.
* ÇÔ¼öÀÇ Àμö·Î »ç¿ëµÉ ¶§´Â ÇÔ¼öÀÇ È£Ãâ ½ÃÁ¡¿¡¼­ ÃʱâÈ­µÈ´Ù.
* ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ¸·Î »ç¿ëµÉ ¶§´Â ¸®Å쵃 ¶§ ÃʱâÈ­µÈ´Ù.

¾ÆÁ÷±îÁö class¿¡ °üÇؼ­´Â ¸ð¸¦ °ÍÀ̹ǷΠÁö±ÝÀº ±×³É º¸¾ÆµÎ°í Áö³ª°¡µµ µÈ
´Ù. ´ÙÀ½¿¡ ´Ù½Ã º¸¸é ¾Ë°ÚÁö¸¸ ÀüÇô »ó½ÄÀÇ ¹üÀ§¸¦ ¹þ¾î³ªÁö ¾Ê´Â Æò¹üÇÑ ¿¹
¿Ü »çÇ×ÀÌ¸ç ¿¹¿ÜÀÇ °æ¿ì¿¡µµ ÃʱâÈ­ ½ÃÁ¡ÀÌ Ç¥Çö»ó ´Ù¸¦ »Ó »ç½Ç °ÅÀÇ ¼±¾ð°ú
µ¿½Ã¿¡ ÃʱâÈ­µÈ´Ù°í º¸¾Æµµ ¹«¹æÇÏ´Ù.
ÂüÁ¶ÀÚ¸¦ ¼±¾ðÇÒ ¶§ ¶Ç ÇÑ °¡Áö ÁÖ¸ñÇÒ °ÍÀº ÂüÁ¶ÀÚÀÇ Çü°ú ÃʱâÈ­ º¯¼öÀÇ Çü
ÀÌ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Á¤¼öÇüÀÇ ÂüÁ¶ÀÚ¸¦ ½Ç¼öÇüÀÇ º¯¼ö·Î ÃʱâÈ­ÇÏ´Â
°ÍÀº ¿Ã¹Ù¸¥ µ¿ÀÛÀ» ÇÏÁö ¾Ê°Ô µÈ´Ù. ±×·¸´Ù°í ¿¡·¯°¡ ¹ß»ýÇÏÁö´Â ¾ÊÀ¸¸ç ÂüÁ¶
Àڴ ŸÀÔÀÌ ´Ù¸¥ º°µµÀÇ º¯¼ö°¡ µÈ´Ù. ÀÌ·± ½Ç¼ö´Â Àß ÇÏÁö ¾Ê°ÚÁö¸¸ ¾î·µç
¾î¶² Çö»óÀÌ ÀϾ´Â Áö´Â º¸°í ³Ñ¾î°¡µµ·Ï ÇÏÀÚ.

#include <iostream.h>

void main()
{
 int i = 3;
 unsigned &j = i;
 cout << " i= " << i << " j= " << j << endl;
 j = 4;
 cout << " i= " << i << " j= " << j << endl;
}

ºÎÈ£¾ø´Â Á¤¼öÇüÀÇ ÂüÁ¶ÀÚ jÀÇ ÃʱⰪÀ¸·Î Á¤¼öÇü º¯¼ö i¸¦ ÁÖ¾ú´Ù. µÎ º¯¼öÀÇ
ŸÀÔÀÌ ¸ÂÁö ¾ÊÀ¸¹Ç·Î j´Â iÀÇ º°ÄªÀ¸·Î Á¦´ë·Î µ¿ÀÛÇÒ ¼ö ¾ø°Ô µÇ¸ç ÄÄÆÄÀÏ·¯
´Â j¸¦ º°µµÀÇ º¯¼ö·Î ¸¸µé¾î ¹ö¸°´Ù. i¿Í j´Â °°Àº ¸Þ¸ð¸® °ø°£À» °¡ÁöÁöµµ
¾ÊÀ¸¸ç ³í¸®ÀûÀ¸·Î ¾Æ¹«·± ¿¬°üÀÌ ¾ø´Ù. ±×·¡¼­ ÇÑ º¯¼ö¿¡ Á¶ÀÛÀ» °¡ÇÑ´Ù ÇÏ¿©
´Ù¸¥ º¯¼ö°¡ º¯ÇÏ´Â ÀÏÀº ¹ß»ýÇÏÁö ¾Ê´Â´Ù.
´ÙÀ½ÀÌ ½ÇÇà °á°úÀÌ´Ù.

i= 3 j= 3
i= 3 j= 4

ÂüÁ¶ÀÚ¸¦ À§¿¡¼­ º¸¿´µíÀÌ ´Ù¸¥ º¯¼öÀÇ º°ÄªÀ¸·Î »ç¿ëÇÏ´Â °æ¿ì´Â º° Ưº°ÇÑ
Àǹ̰¡ ¾øÀ¸¸ç ÂüÁ¶ÀÚ°¡ Á¦¸òÀ» ÇÏ´Â ÁÁÀº ¿¹´Â ÇÔ¼öÀÇ Àμö·Î »ç¿ëµÇ°Å³ª ¸®
ÅÏ°ªÀ¸·Î »ç¿ëµÉ ¶§ÀÌ´Ù.
C¿¡¼­´Â Àμö Àü´Þ ¹æ½Ä¿¡ µû¶ó ÇÔ¼öÀÇ È£Ãâ ¹æ¹ýÀÌ µÎ °¡Áö°¡ ÀÖ´Ù. ÀμöÀÇ
°ªÀ» Àü´ÞÇÏ´Â ¹æ½ÄÀÎ °ªÈ£Ãâ ¹æ½Ä°ú ¹øÁö¸¦ Àü´ÞÇÏ´Â ÂüÁ¶È£Ãâ ¹æ½ÄÀÌ ÀÖ´Ù.
°ªÈ£Ãâ ¹æ¹ýÀº ½ÇÀμöÀÇ º¹»çº»À» ³Ñ°ÜÁÖ°í ÇÔ¼ö ³»ºÎ¿¡¼­´Â ÀÌ º¹»çº»À» Çü½Ä
Àμö·Î ¹Þ¾Æ »ç¿ëÇϱ⠶§¹®¿¡ ÇÔ¼ö ³»ºÎ¿¡¼­ Àý´ë·Î ½ÇÀμöÀÇ °ªÀ» º¯°æ½Ãų
¼ö ¾ø´Ù. ¹Ý¸é ÂüÁ¶È£ÃâÀº ½ÇÀμö ÀÚü¸¦ ³Ñ°ÜÁֱ⠶§¹®¿¡ ÇÔ¼ö ³»ºÎ¿¡¼­ ½ÇÀÎ
¼ö¸¦ Á÷Á¢ °Çµå¸± ¼ö ÀÖ´Ù.
C´Â Æ÷ÀÎÅ͸¦ »ç¿ëÇؼ­ °£Á¢ÀûÀ¸·Î ÂüÁ¶È£ÃâÀ» Áö¿øÇÑ´Ù. ±×·¯³ª CÀÇ ÂüÁ¶È£
Ãâ ¹æ½ÄÀº °á°ú´Â ¸ÂÁö¸¸ ¹øÁö ±× ÀÚüµµ °ª(¹øÁö°ª)ÀÇ ÇüÅ·Π³Ñ°ÜÁֹǷΠ¿Ï
ÀüÇÑ ÂüÁ¶ È£ÃâÀ̶ó°í º¸±â°¡ Á¶±Ý ¾Ö¸ÅÇÏ´Ù. C++¿¡¼­´Â ÂüÁ¶È£Ãâ ¹æ½ÄÀ» ¿øÄ¢
ÀûÀ¸·Î Á¦°øÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¸¦º¸¸é ±× ¹æ½ÄÀ» ´ëÃæÀ̳ª¸¶ ÁüÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÌ
´Ù.

#include <stdio.h>

void dubae( int &i);  // ÇÔ¼öÀÇ Àμö¿¡ &°¡ ¾²¿´´Ù.

main()
{
 int j;
 j = 2;
 dubae( j);
 printf( "%d\n", j);
}

void dubae( int &i)   // ÂüÁ¶ÀÚ¸¦ Àμö·Î ¹Þ¾ÆµéÀδÙ.
{
 i *= 2;           // ÂüÁ¶ÀÚ(=½ÇÀμö)¸¦ Á÷Á¢ º¯°æÇÑ´Ù.
}

À§¿¡¼­ Á¤ÀÇµÈ ÇÔ¼ö dubae°¡ ÂüÁ¶È£Ãâ ¹æ½ÄÀÇ ÇÔ¼öÀÌ´Ù. ÂüÁ¶ ¹æ½ÄÀ¸·Î Àü´ÞÇÏ
°íÀÚ ÇÏ´Â Àμö ¾Õ¿¡ ÂüÁ¶ ¼±¾ðÀÚÀÎ & ±âÈ£¸¦ ºÙ¿©ÁÖ¸é µÈ´Ù. ±×¸®°í È£ÃâÇÒ¶§
´Â º¯¼ö¸¦ ±×´ë·Î ³Ñ°ÜÁֱ⸸ ÇÏ¸é ±× º¯¼ö¿Í ¿ÏÀüÈ÷ ¶È°°Àº º¯¼ö¸¦ ¸¸µé¾î ÇÔ
¼ö ³»ºÎ¿¡¼­ Á÷Á¢ º¯¼ö¸¦ º¯°æ½ÃÅ°°Ô µÈ´Ù. ÇÔ¼ö È£Ãâ½ÃÀÇ dubae(j)ÀÇ ½ÇÀμö
j¿Í dubae ÇÔ¼ö Á¤ÀǺÎÀÇ Çü½Ä Àμö i´Â À̶§ °°Àº ¸Þ¸ð¸® À§Ä¡¸¦ °¡Áö´Â ¿ÏÀü
È÷ °°Àº º¯¼öÀÌ´Ù. i¿¡ ´ëÇØ ¾î¶² Á¶ÀÛÀ» °¡Çϸé j¿¡ ±× È¿°ú°¡ Á÷Á¢ÀûÀ¸·Î ³ª
Ÿ³ª°Ô µÈ´Ù.


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


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