¸â¹ö Æ÷ÀÎÅÍ º¯¼ö¶õ ƯÁ¤ Ŭ·¡½º(±¸Á¶Ã¼µµ ¹°·Ð Æ÷ÇԵȴÙ.)¿¡ ¼ÓÇÑ ¸â¹ö¸¸À» °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ÀÏ¹Ý Æ÷ÀÎÅÍ°¡ ¸Þ¸ð¸®»óÀÇ ÀÓÀÇ ÁöÁ¡À» °¡¸®Å³ ¼ö Àִµ¥ ºñÇØ °´Ã¼ ³»ÀÇ ÇÑ ÁöÁ¡¸¸À» °¡¸®Å²´Ù´Â Á¡¿¡¼ µ¶Æ¯ÇÏ´Ù. ¼±¾ð Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
ŸÀÔ Å¬·¡½º::*À̸§;
Æ÷ÀÎÅÍ º¯¼öÀ̹ǷΠ´ç¿¬È÷ ´ë»óüÀÇ Å¸ÀÔÀÌ ÇÊ¿äÇÏ´Ù. ±×¸®°í ƯÁ¤ Ŭ·¡½º ¼Ò¼ÓÀÇ º¯¼ö¸¸À» °¡¸®Å³ ¼ö ÀÖÀ¸¹Ç·Î ¾î¶² Ŭ·¡½ºÀÇ ¸â¹öµéÀ» °¡¸®Å³ °ÍÀÎÁöµµ ¹àÇô¾ß Çϸç Ŭ·¡½º ¼Ò¼Ó µÚ¿¡ Æ÷ÀÎÅÍÀÓÀ» ³ªÅ¸³»´Â ±¸µÎÁ¡ *¿Í º¯¼öÀÇ À̸§À» Àû´Â´Ù. ¼±¾ð Çü½ÄÀÌ ´Ù¼Ò »ý¼ÒÇϹǷΠ°£´ÜÇÑ ¿¹Á¦¸¦ º¸°í »ç¿ë¿¹¸¦ ÀÍÇô º¸ÀÚ.
¿¹ Á¦ : 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=#
}
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'°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.