33-3.¸â¹ö Æ÷ÀÎÅÍ ¿¬»êÀÚ

33-3-°¡.¸â¹ö Æ÷ÀÎÅÍ º¯¼ö

¸â¹ö Æ÷ÀÎÅÍ º¯¼ö¶õ ƯÁ¤ Ŭ·¡½º(±¸Á¶Ã¼µµ ¹°·Ð Æ÷ÇԵȴÙ.)¿¡ ¼ÓÇÑ ¸â¹ö¸¸À» °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ÀÏ¹Ý Æ÷ÀÎÅÍ°¡ ¸Þ¸ð¸®»óÀÇ ÀÓÀÇ ÁöÁ¡À» °¡¸®Å³ ¼ö Àִµ¥ ºñÇØ °´Ã¼ ³»ÀÇ ÇÑ ÁöÁ¡¸¸À» °¡¸®Å²´Ù´Â Á¡¿¡¼­ µ¶Æ¯ÇÏ´Ù. ¼±¾ð Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

 

ŸÀÔ Å¬·¡½º::*À̸§;

 

Æ÷ÀÎÅÍ º¯¼öÀ̹ǷΠ´ç¿¬È÷ ´ë»óüÀÇ Å¸ÀÔÀÌ ÇÊ¿äÇÏ´Ù. ±×¸®°í ƯÁ¤ Ŭ·¡½º ¼Ò¼ÓÀÇ º¯¼ö¸¸À» °¡¸®Å³ ¼ö ÀÖÀ¸¹Ç·Î ¾î¶² Ŭ·¡½ºÀÇ ¸â¹öµéÀ» °¡¸®Å³ °ÍÀÎÁöµµ ¹àÇô¾ß Çϸç Ŭ·¡½º ¼Ò¼Ó µÚ¿¡ Æ÷ÀÎÅÍÀÓÀ» ³ªÅ¸³»´Â ±¸µÎÁ¡ *¿Í º¯¼öÀÇ À̸§À» Àû´Â´Ù. ¼±¾ð Çü½ÄÀÌ ´Ù¼Ò »ý¼ÒÇϹǷΠ°£´ÜÇÑ ¿¹Á¦¸¦ º¸°í »ç¿ë¿¹¸¦ ÀÍÇô º¸ÀÚ.

 

¿¹ Á¦ : MemberPointer

#include <Turboc.h>

 

class MyClass

{

public:

     int i,j;

     double d;

};

 

void main()

{

     MyClass C;

     int MyClass::*pi;

     double MyClass::*pd;

     int num;

 

     pi=&MyClass::i;

     pi=&MyClass::j;

     pd=&MyClass::d;

     //pd=&MyClass::i;

     //pi=&MyClass::d;

     //pi=&num;

}

 

MyClass¿¡´Â Á¤¼öÇü ¸â¹ö º¯¼ö i, j¿Í ½Ç¼öÇü ¸â¹ö º¯¼ö d°¡ Æ÷ÇԵǾî ÀÖ´Ù. main¿¡¼­ ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö pi¿Í pd¸¦ ¼±¾ðÇϴµ¥ pi´Â MyClass¿¡ ¼ÓÇÑ Á¤¼öÇü º¯¼ö¸¦ °¡¸®Å°µµ·Ï ¼±¾ðÇßÀ¸¸ç pd´Â MyClass¿¡ ¼ÓÇÑ ½Ç¼öÇü º¯¼ö¸¦ °¡¸®Å°µµ·Ï ¼±¾ðÇß´Ù. pi°¡ °¡¸®Å³ ¼ö ÀÖ´Â º¯¼ö´Â ¹Ýµå½Ã MyClass¿¡ ¼ÓÇÑ ¸â¹ö¿©¾ß ÇÏ¸ç ¶ÇÇÑ Á¤¼öÇüÀ̾î¾ß ÇÑ´Ù. µû¶ó¼­ pi´Â MyClass::i¶Ç´Â MyClass::jÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö ÀÖÀ¸¸ç ŸÀÔÀÌ ´Ù¸£°Å³ª ¼Ò¼ÓÀÌ ´Ù¸¥ º¯¼ö´Â °¡¸®Å³ ¼ö ¾ø´Ù. MyClass::d´Â MyClass ¼Ò¼ÓÀ̱â´Â ÇÏÁö¸¸ Á¤¼öÇüÀÌ ¾Æ´Ï¹Ç·Î pi¿¡ ±× ¹øÁö¸¦ ´ëÀÔÇÒ ¼ö ¾øÀ¸¸ç mainÀÇ Áö¿ªº¯¼ö numÀº Á¤¼öÇüÀ̱â´Â ÇÏÁö¸¸ MyClass ¼Ò¼ÓÀÌ ¾Æ´Ï¹Ç·Î ¿ª½Ã pi¿¡ ´ëÀÔÇÒ ¼ö ¾ø´Ù.

°°Àº ¿ø¸®·Î pd´Â MyClass¿¡ ¼ÓÇÑ ½Ç¼öÇü º¯¼öÀÇ ¹øÁö¸¸ °¡¸®Å³ ¼ö ÀÖÀ¸¹Ç·Î ¿À·ÎÁö dÀÇ ¹øÁö¸¸ °¡¸®Å³ ¼ö ÀÖ´Ù. pd¿¡ i³ª jÀÇ ¹øÁö¸¦ ´ëÀÔÇϰųª Ŭ·¡½º ¿ÜºÎÀÇ ½Ç¼öÇü º¯¼öÀÇ ¹øÁö¸¦ ´ëÀÔÇϸé ÄÄÆÄÀÏ ¿¡·¯·Î 󸮵ȴÙ. ´ç¿¬ÇÑ ¾ê±â°ÚÁö¸¸ pi, pd´Â MyClass ¿ÜºÎ¿¡ ÀÖ´Â º¯¼öÀ̹ǷΠÀÌ º¯¼ö°¡ Ŭ·¡½º ³»ºÎÀÇ º¯¼ö¸¦ °¡¸®Å°·Á¸é ´ë»óü ¸â¹ö´Â publicÀ¸·Î ¼±¾ðµÇ¾î¾ß ÇÑ´Ù. À§ ¿¹Á¦¿¡¼­ i³ª j¸¦ private·Î ¼±¾ðÇϸé ÄÄÆÄÀÏ ¿¡·¯ÀÌ´Ù.

¸â¹ö Æ÷ÀÎÅÍ º¯¼ö¸¦ ÃʱâÈ­ÇÒ ¶§´Â ¾î¶² Ŭ·¡½º¿¡ ¼ÓÇÑ ¾î¶² º¯¼öÀÇ ¹øÁö¸¦ °¡¸®Å³ °ÍÀÎÁö &Class::Member ½ÄÀ¸·Î ´ëÀÔÇÑ´Ù. ÀÌ ´ëÀÔ½ÄÀº ƯÁ¤ º¯¼öÀÇ ¹øÁö¸¦ °¡¸®Å°µµ·Ï ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Ŭ·¡½ºÀÇ ¾î¶² ¸â¹ö¸¦ °¡¸®Å³ °ÍÀΰ¡¸¸ ÃʱâÈ­ÇÏ´Â °ÍÀ̹ǷΠÀÌ »óÅ¿¡¼­ ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö¿¡ ´ëÀԵǴ ¹øÁö°¡ °áÁ¤µÇ´Â °ÍÀº ¾Æ´Ï´Ù. ´Ù¸¸ °¡¸®Å°´Â ¸â¹ö°¡ Ŭ·¡½ºÀÇ ¾îµðÂë¿¡ ÀÖ´ÂÁö À§Ä¡¿¡ ´ëÇÑ Á¤º¸¸¸À» °¡Áú »ÓÀÌ´Ù. Ŭ·¡½º Àüü¸¦ ÇϳªÀÇ ÀÛÀº ÁÖ¼Ò °ø°£À¸·Î º¸°í Ŭ·¡½º³»ÀÇ ¸â¹ö À§Ä¡¸¦ ±â¾ïÇÏ´Â °ÍÀÌ´Ù. ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö·Î °´Ã¼ÀÇ ½ÇÁ¦ ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¶§´Â ¸â¹ö Æ÷ÀÎÅÍ ¿¬»êÀÚ¶ó´Â Ư¼öÇÑ ¿¬»êÀÚ°¡ ÇÊ¿äÇÏ´Ù.

 

Obj.*mp

pObj->*mp

 

.* ¿¬»êÀÚ´Â Áº¯ÀÇ °´Ã¼¿¡¼­ ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö mp°¡ °¡¸®Å°´Â ¸â¹ö¸¦ Àд´Ù. Obj°¡ »ó¼ö °´Ã¼°¡ ¾Æ´Ï°í mp°¡ »ó¼ö°¡ ¾Æ´Ñ µ¥ÀÌÅÍ ¸â¹ö¸¦ °¡¸®Å²´Ù¸é Obj.*mp ÀÚü´Â Áº¯°ªÀ̹ǷΠÀÌ ½ÄÀ» Áº¯¿¡ ³õ¾Æ ¸â¹ö °ªÀ» º¯°æÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. ->*¿¬»êÀÚ´Â Áº¯ÀÇ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °´Ã¼¿¡¼­ mp°¡ °¡¸®Å°´Â ¸â¹ö¸¦ Àд´Ù. µÎ ¿¬»êÀڴ ù ¹ø° ÇÇ ¿¬»êÀÚ°¡ °´Ã¼Àΰ¡ °´Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀΰ¡¸¸ ´Ù¸¦ »ÓÀÌ¸ç ±â´ÉÀûÀ¸·Î °ÅÀÇ µ¿ÀÏÇÏ´Ù.

¸â¹ö Æ÷ÀÎÅÍ º¯¼ö°¡ ½ÇÁ¦·Î ¾î¶»°Ô ÃʱâÈ­µÇ°í .* ¿¬»êÀÚ°¡ °´Ã¼ÀÇ ¸â¹ö¸¦ ¾î¶»°Ô ÀÐÀ» °ÍÀΰ¡´Â ÄÄÆÄÀÏ·¯¿¡ µû¶ó ±¸Çö ¹æ½ÄÀÌ ´Ù¸¦ °ÍÀÌ´Ù. ÁַΠŬ·¡½º³»ÀÇ ¸â¹ö À§Ä¡ÀÎ ¿ÀÇÁ¼ÂÀ» ±â¾ïÇØ µÎ¾ú´Ù°¡ .*¿¬»êÀÚ°¡ Àû¿ëµÉ ¶§ °´Ã¼ÀÇ ¿ÀÇÁ¼ÂÀ» ´ë»óü ŸÀÔ¸¸Å­ Àд ¹æ¹ýÀ» ¾´´Ù. ÀÌ µÎ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© °´Ã¼ÀÇ ¸â¹ö¸¦ ¾×¼¼½ºÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : MemberPointOp

#include <Turboc.h>

 

class Position

{

public:

     int x,y;

     char ch;

 

     Position() {x=0;y=0;ch='A';}

     void OutPosition() {

          gotoxy(x, y);putch(ch);

     }

};

 

void main()

{

     Position Here;

     Position *pPos=&Here;

     int Position::*pi;

 

     pi=&Position::x;

     Here.*pi=30;

     pi=&Position::y;

     pPos->*pi=5;

     Here.OutPosition();

}

 

Position Ŭ·¡½º´Â È­¸é»óÀÇ À§Ä¡¿Í ÀÌ À§Ä¡¿¡ Ãâ·ÂÇÒ ¹®ÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö´Â °£´ÜÇÑ Å¬·¡½ºÀÌ´Ù. main¿¡¼­´Â Position °´Ã¼ Here¿Í Here¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ º¯¼ö pPos¸¦ ¼±¾ðÇØ µÎ¾ú´Ù. ±×¸®°í Position Ŭ·¡½º¿¡ ¼ÓÇÑ Á¤¼öÇü ¸â¹öÀÇ ¹øÁö¸¦ °¡¸®Å³ ¼ö ÀÖ´Â ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö pi¸¦ ¼±¾ðÇÏ°í pi·ÎºÎÅÍ x¿Í yÀÇ °ªÀ» °£Á¢ÀûÀ¸·Î ¾×¼¼½ºÇÑ´Ù. pi°¡ Position::x¸¦ °¡¸®Å°µµ·Ï ÃʱâÈ­ÇÑ ÈÄ .* ¿¬»êÀÚ·Î Here°´Ã¼ÀÇ x¸¦ 30À¸·Î º¯°æÇß´Ù. ±×¸®°í pi°¡ Position::y¸¦ °¡¸®Å°µµ·Ï ÇÑ ÈÄ ->*¿¬»êÀÚ·Î pPos Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °´Ã¼ÀÇ y¸¦ 5·Î º¯°æÇØ º¸¾Ò´Ù.

pi°¡ PositionŬ·¡½ºÀÇ Á¤¼öÇü ¸â¹ö¸¦ °¡¸®Å°µµ·Ï ¼±¾ðÇßÀ¸¹Ç·Î PositionÀÇ Á¤¼öÇü ¸â¹ö¸¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â °ÍÀº ´ç¿¬ÇÏ´Ù. ÀÏ¹Ý Æ÷ÀÎÅÍ´Â ¸Þ¸ð¸® ³»ÀÇ ÀÓÀÇ À§Ä¡¿¡ ÀÖ´Â ÁöÁ¤ÇÑ Å¸ÀÔÀÇ º¯¼ö¸¦ °¡¸®Å³ ¼ö ÀÖÁö¸¸ ¸â¹ö Æ÷ÀÎÅÍ´Â ÁöÁ¤ÇÑ Å¸ÀÔÀÇ º¯¼ö¸¦ °¡¸®Å³ ¼ö ÀÖµÇ ±× ¹üÀ§°¡ Ŭ·¡½º ³»·Î¸¸ ±¹Çѵȴٴ Á¡ÀÌ ´Ù¸£´Ù. ¸â¹ö Æ÷ÀÎÅÍ º¯¼ö´Â ¸â¹ö¿¡ ´ëÇÑ À§Ä¡¸¦ °¡¸®Å°¹Ç·Î *pi½ÄÀº ÀÌ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ¸â¹öÀÇ ¿ªÇÒÀ» ´ë½ÅÇÏ´Â ¼ÀÀÌ´Ù. ÀÏ¹Ý Æ÷ÀÎÅÍÀÇ °æ¿ì¿Í ¸â¹ö Æ÷ÀÎÅÍÀÇ °æ¿ì ¶È°°Àº ¿ø¸®°¡ Àû¿ëµÈ´Ù.

 

int *pi=&i;

*pi=30;

 

pi°¡ iÀÇ ¹øÁö¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ *pi´Â °ð i¿Í °°Àº Ç¥Çö½ÄÀ̸ç *pi¿¡ 30À» ´ëÀÔÇϸé i°ªÀÌ º¯°æµÈ´Ù. *pi=30 ´ëÀÔ¹®Àº i=30 ´ëÀÔ¹®°ú °°´Ù. ¸â¹ö Æ÷ÀÎÅÍÀÇ °æ¿ìµµ ¸¶Âù°¡ÁöÀÌ´Ù.

 

int Position::*pi=&Position::x;

Here.*pi=30;

 

pi°¡ PositionÀÇ x¸¦ °¡¸®Å°°í ÀÖÀ» ¶§ Here.*pi´Â Here.x¿Í °°Àº Ç¥Çö½ÄÀ̸ç Here.*pi¿¡ °ªÀ» ´ëÀÔÇϸé HereÀÇ Á¤¼öÇü ¸â¹ö x°¡ º¯°æµÈ´Ù. °¡¸®Å³ ¼ö ÀÖ´Â ¹üÀ§°¡ °´Ã¼ ³»ºÎÀÇ ¸â¹öÀÏ »ÓÀÌÁö ÀÏ¹Ý Æ÷ÀÎÅÍ¿¡ ºñÇØ ´ë»óü¸¦ °£Á¢ÀûÀ¸·Î ¾×¼¼½ºÇÑ´Ù´Â ¸é¿¡¼­ µ¿ÀÏÇÏ´Ù.

ÀÏ¹Ý Æ÷ÀÎÅÍ¿Í ¸¶Âù°¡Áö·Î ¸â¹ö Æ÷ÀÎÅ͵µ ŸÀÔÀÌ ¸Â´Â ´ë»óü¸¸ °¡¸®Å³ ¼ö ÀÖ´Ù. ch´Â Position ¼Ò¼ÓÀ̱â´Â ÇÏÁö¸¸ Á¤¼öÇüÀÌ ¾Æ´Ï¹Ç·Î pi·Î °ªÀ» º¯°æÇÒ ¼ö ¾ø´Ù. °á±¹ ÀÌ ¿¹Á¦ÀÇ .* ¿¬»ê¹®°ú ->* ¿¬»ê¹®Àº µÑ ´Ù HereÀÇ x, y ¸â¹ö°ªÀ» °£Á¢ÀûÀ¸·Î º¯°æÇÏ´Â °ÍÀÌ´Ù. ¸â¹ö°ªÀ» º¯°æÇÑ ÈÄ OutPositionÀ¸·Î ±× °á°ú¸¦ Ãâ·ÂÇØ º¸¾Ò´Âµ¥ (30,5)¿¡ 'A'°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.