28-3-¸¶.[ ] ¿¬»êÀÚ

[ ] ¿¬»êÀÚ´Â ¹è¿­¿¡¼­ ÷ÀÚ ¹øÈ£·ÎºÎÅÍ ¿ä¼Ò¸¦ ã´Â´Ù. ¹Ýµå½Ã ¸â¹ö ÇÔ¼ö·Î¸¸ Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç Àü¿ª ÇÔ¼ö·Î´Â Á¤ÀÇÇÒ ¼ö ¾ø´Ù. ¿©·¯ °¡Áö ÀÚ·áÀÇ ÁýÇÕÀ» ´Ù·ç´Â Ŭ·¡½º¿¡¼­ ÀÌ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ¿© ¿øÇϴ´ë·Î ±â´ÉÀ» ºÎ¿©ÇÒ ¼ö ÀÖ´Ù. ¾ÕÀå¿¡¼­ ¸¸µé¾ú´ø µ¿Àû ¹è¿­ Ŭ·¡½ºÀÎ DArray Ŭ·¡½º¿¡ [ ] ¿¬»êÀÚ ÇÔ¼ö¸¦ Ãß°¡ÇØ º¸ÀÚ. DArray ¿¹Á¦¿¡ ´ÙÀ½ ¸â¹ö ¿¬»êÀÚ ÇÔ¼ö¸¸ Ãß°¡ÇÏ¸é µÈ´Ù.

 

class DArray

{

     ....

     ELETYPE &operator [](int idx) {

          return ar[idx];

     }

};

 

¹è¿­ ÷ÀÚ¸¦ Àμö·Î Àü´ÞÇϸé Àμö°¡ ÁöÁ¤ÇÏ´Â ¼ø¼­ÀÇ ¹è¿­ ¿ä¼Ò¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϵµ·Ï Çß´Ù. ÀÌ ¿¬»êÀÚ°¡ Á¤ÀÇµÇ¸é ¹è¿­ ¿ä¼Ò¸¦ °£ÆíÇÏ°Ô ÀÐ°í ¾µ ¼ö ÀÖ´Ù.

 

printf("%d\n",ar[3]);;

ar[3]=100;

 

ar[3]À¸·Î ³× ¹ø° ¿ä¼Ò¸¦ ÀÐÀ» ¼ö ÀÖÀ» »Ó¸¸ ¾Æ´Ï¶ó ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϹǷΠar[3]À» ´ëÀÔ½ÄÀÇ Áº¯¿¡ ³õ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ ¿¬»êÀÚ¿¡ ÀÇÇØ Ã·ÀڷκÎÅÍ ¹è¿­ ¿ä¼Ò¸¦ ÀÐ°í ¾µ ¼ö ÀÖÀ¸¹Ç·Î GetAt, SetAt ¸â¹ö ÇÔ¼ö´Â ÀÌÁ¦ »èÁ¦Çصµ »ó°ü¾ø´Ù. À̸§À» °¡Áö´Â ¸â¹ö ÇÔ¼öº¸´Ù [ ] ¿¬»êÀÚ°¡ ÈξÀ ´õ Á÷°üÀûÀÌ´Ù. [ ] ¿¬»êÀÚ°¡ ´Ù¸¥ ¿¬»êÀÚµé°ú ´Ù¸¥ ƯÀÌÇÑ Á¡À̶ó¸é ´ëÀÔ½ÄÀÇ Áº¯°ú ¿ìº¯¿¡ ¸ðµÎ ¾µ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼­ »ó¼ö °´Ã¼¿¡ ´ëÇؼ­µµ ¾µ ¼ö ÀÖ´Â const ¹öÀüÀÇ [ ] ¿¬»êÀÚµµ Áߺ¹ Á¤ÀÇÇØ¾ß ÇÑ´Ù. »ó¼ö [ ] ¿¬»êÀÚ¸¦ ¸¸µéÁö ¾Ê¾ÒÀ» ¶§ ¾î¶»°Ô µÇ´ÂÁö Å×½ºÆ®ÇØ º¸ÀÚ.

 

const DArray car;

car[0]=3;                         // ¿¡·¯

printf("%d\0",car[0]);            // À̰͵µ ¿¡·¯

 

car´Â »ó¼ö °´Ã¼·Î ¼±¾ðµÇ¾úÀ¸¹Ç·Î °ªÀ» º¯°æÇÒ ¼ö ¾ø´Ù. ±×·¯¹Ç·Î car[0]¿¡ ¾î¶² °ªÀ» ´ëÀÔÇÏ´Â ¹®ÀåÀº ´ç¿¬È÷ ¿¡·¯À̸ç ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù. ±×·¯³ª ¸¶Áö¸· ¹®ÀåÀº car[0]¸¦ Àб⸸ Çߴµ¥µµ ºÒ±¸ÇÏ°í ¿ª½Ã ¿¡·¯·Î 󸮵Ǵµ¥ ÀÌ´Â ÇÕ¸®ÀûÀÌÁö ¸øÇÏ´Ù. [ ] ¿¬»êÀÚ°¡ Áº¯¿¡ ¾²ÀÏ ¶§´Â °ªÀ» º¯°æÇÏÁö ¸øÇϹǷΠ´ç¿¬È÷ ¿¡·¯ÀÌÁö¸¸ ¿ìº¯¿¡ ¾²ÀÏ ¶§´Â Àб⸸ ÇϹǷΠÇã¿ëµÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª ÄÄÆÄÀÏ·¯´Â ÇÔ¼öÀÇ ¼±¾ð¹®¿¡ const ÁöÁ¤ÀÌ ¾øÀ¸¸é °´Ã¼ÀÇ ³»¿ëÀ» ¹Ù²Ü ¼öµµ ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®¿¡ »ç¿ëµÇ´Â À§Ä¡¿¡ »ó°ü¾øÀÌ »ó¼ö °´Ã¼¿¡ ´ëÇؼ­´Â ÀÌ ¿¬»êÀÚ¸¦ »ç¿ë ±ÝÁö½ÃŲ´Ù. ¸¸¾à »ó¼ö °´Ã¼¿¡ ´ëÇØ Àб⸸ ÇÏ´Â [ ] ¿¬»êÀÚ¸¦ µû·Î Á¤ÀÇÇÏ°í ½Í´Ù¸é ´ÙÀ½ ¿¬»êÀÚ ÇÔ¼ö¸¦ Çϳª ´õ ¿À¹ö·ÎµùÇØ¾ß ÇÑ´Ù.

 

const ELETYPE &operator [](int idx) const {

     return ar[idx];

}

 

»ó¼ö ÇÔ¼ö¿Í ºñ»ó¼ö ÇÔ¼ö¸¦ °¢°¢ Á¦°øÇϸé ÄÄÆÄÀÏ·¯´Â °´Ã¼ÀÇ »ó¼ö¼ºÀ» º¸°í Àû´çÇÑ ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. ±×·±µ¥ À§ ¿¹ÀÇ car °´Ã¼´Â ¾Æ¹« ¦¿¡µµ ¾µ¸ð¾ø´Â °´Ã¼Ã³·³ º¸ÀδÙ. µ¿Àû ¹è¿­À̶õ °ªÀ» ÀúÀåÇÏ´Â °ÍÀÌ º»¿¬ÀÇ ÀÓ¹«Àε¥ ÀÌ °´Ã¼¸¦ »ó¼ö·Î ¼±¾ðÇÏ¸é ¿ä¼Ò¸¦ Ãß°¡Çϰųª »èÁ¦ÇÒ ¼ö ¾øÀ¸¸ç ¿À·ÎÁö ÀÐÀ» ¼ö¸¸ ÀÖ´Ù. Ãß°¡°¡ ¾ÈµÇ´Âµ¥ Àд ±â´ÉÀÌ °¡´ÉÇÑ °ÍÀº ¾Æ¹« Àǹ̰¡ ¾øÁö ¾ÊÀº°¡? °ú¿¬ ±×·¸±â´Â ÇÏ´Ù. ±×·¯³ª ±×·¡µµ »ó¼ö °´Ã¼´Â ¿©ÀüÈ÷ ÇÊ¿äÇѵ¥ ÇÔ¼öÀÇ Àμö·Î Àü´Þ¹ÞÀ» ¶§ Çü½Ä Àμö°¡ »ó¼ö¼ºÀ» °¡Á®¾ß ÇÒ ÇÊ¿ä°¡ Àֱ⠶§¹®ÀÌ´Ù.

 

func(const DArray *pAr) { ... }

 

ÀÌ·± ÇÔ¼ö ³»ºÎ¿¡¼­ pArÀÌ °¡¸®Å°´Â ´ë»óü¸¦ »ó¼ö Ãë±ÞÇÏ°í ½ÍÀ» ¶§ »ó¼ö °´Ã¼°¡ »ç¿ëµÇ¸ç ÀÌ °´Ã¼ÀÇ °ªÀ» Àбâ À§ÇØ »ó¼ö¼ºÀ» °¡Áö´Â [ ] ¿¬»êÀÚµµ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

¸¸¾à [ ] ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ´Â °´Ã¼ÀÇ ¹è¿­À» ¸¸µç´Ù¸é ÀÌ ¹è¿­¿¡¼­ °´Ã¼¸¦ ¼±ÅÃÇÏ´Â [ ] ¿¬»êÀÚ¿Í ¿À¹ö·ÎµùµÈ [ ] ¿¬»êÀÚ´Â ¾î¶»°Ô ±¸ºÐÇÒ ¼ö ÀÖÀ»±î? ¿¹¸¦ µé¾î µ¿Àû ¹è¿­ °´Ã¼ÀÇ ¹è¿­À» Å©±â 3À¸·Î ¼±¾ðÇÏ´Â ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

DArray ar[3];

ar[2][1]=5;

 

ÀÌ °æ¿ì ar[2][1]ÀÇ ¾ÕÂÊ [2]¿Í µÚÂÊÀÇ [1]Àº °¢°¢ ¾î¶² Àǹ̸¦ °¡Áú±î? ¾ð¶æ º¸±â¿¡´Â ÄÄÆÄÀÏ·¯°¡ ¹«Ã´ Çò°¥·ÁÇÒ °Í °°Áö¸¸ Â÷±ÙÈ÷ »ý°¢ÇØ º¸¸é ´ë»ó ŸÀÔÀ¸·ÎºÎÅÍ Á¤È®ÇÑ ¿¬»êÀÚÀÇ Àǹ̸¦ ¾î·ÆÁö ¾Ê°Ô ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ¾ÕÂÊÀÇ [2]´Â Àüü ¹è¿­ ar¿¡ ´ëÇØ ¾²¿©Á³À¸¹Ç·Î ÀÌ ¿¬»êÀÚ´Â º»·¡ÀÇ ¹è¿­ ÷ÀÚ ¿¬»êÀÚÀ̸ç ar¹è¿­¿¡¼­ 2¹ø° ¿ä¼Ò¸¦ ¼±ÅÃÇÑ´Ù. µÚÂÊÀÇ [1]Àº ar[2]¿¡ ´ëÇØ ¾²¿©Á³À¸¸ç ar[2]´Â DArray ŸÀÔÀÇ °´Ã¼À̹ǷΠÀÌ ¿¬»êÀÚ´Â ¿À¹ö·ÎµùµÈ ¿¬»êÀÚÀÌ´Ù.

[ ] ¿¬»êÀÚ´Â ¿ø·¡ ¹è¿­ ¿ä¼ÒÁß Çϳª¸¦ ±¸ÇÏ´Â µ¿ÀÛÀ» ÇÏÁö¸¸ ¿À¹ö·ÎµùµÇ¸é ¿ÏÀüÈ÷ ´Ù¸¥ Àǹ̸¦ ºÎ¿©ÇÒ ¼öµµ ÀÖÀ¸¸ç ¹è¿­°ú »ó°ü¾ø´Â Ŭ·¡½º¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¾î·µç ÀԷ°ªÀ¸·ÎºÎÅÍ °´Ã¼ÀÇ Á¤º¸ Áß Çϳª¸¦ ¸®ÅÏÇÏ´Â ÇüÅÂÀÇ µ¿ÀÛÀº ¸ðµÎ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î Time°´Ã¼ÀÇ °¢ ¿ä¼Ò¸¦ ±¸ÇÏ´Â ¿ëµµ·Îµµ ¾µ ¼ö Àִµ¥ ´ÙÀ½ÀÌ ±× ¿¹ÀÌ´Ù.

 

¿¹ Á¦ : TimeIndex

#include <Turboc.h>

 

class Time

{

private:

     int hour,min,sec;

 

public:

     Time() { }

     Time(int h, int m, int s) { hour=h; min=m; sec=s; }

     void OutTime() {

          printf("%d:%d:%d\n",hour,min,sec);

     }

     int &operator [](int what) {

          switch (what) {

          case 0:

              return hour;

          case 1:

              return min;

          default:

          case 2:

              return sec;

          }

     }

     const int &operator [](int what) const {

          switch (what) {

          case 0:

              return hour;

          case 1:

              return min;

          default:

          case 2:

               return sec;

          }

     }

};

 

void main()

{

     Time A(1,1,1);

     const Time B(7,7,7);

 

     A[0]=12;

     printf("ÇöÀç %d½ÃÀÔ´Ï´Ù.\n",A[0]);

     //B[0]=8;

     printf("ÇöÀç %d½ÃÀÔ´Ï´Ù.\n",B[0]);

}

 

Time °´Ã¼¸¦ ±¸¼ºÇÏ´Â hour, min, sec ¸â¹ö´Â ¹è¿­ÀÌ ¾Æ´ÏÁö¸¸ [ ] ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ¿© [0]ÀÌ¸é ½Ã, [1]ÀÌ¸é ºÐ, [2]¸é Ãʸ¦ ¸®ÅÏÇϵµ·Ï Çß´Ù. ¿ÜºÎ¿¡¼­´Â ¸¶Ä¡ ÀÌ °´Ã¼¸¦ ±¸¼ºÇÏ´Â ½ÃºÐÃÊ ¸â¹ö°¡ ¹è¿­¿¡ ¼ÓÇÑ ¿ä¼ÒÀÎ °Íó·³ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

¶È°°Àº [ ] ¿¬»êÀÚ°¡ µÎ ¹ú Á¤ÀǵǾî Àִµ¥ Çϳª´Â ºñ»ó¼ö ¹öÀüÀÌ°í Çϳª´Â »ó¼ö ¹öÀüÀÌ´Ù. [ ] ¿¬»êÀÚ°¡ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇϹǷΠÀÌ ¿¬»êÀÚ·Î °´Ã¼ÀÇ °ªÀ» ÀÐÀ» ¼ö ÀÖÀ» »Ó¸¸ ¾Æ´Ï¶ó A[0]=12 ó·³ ÷ÀÚ ¿¬»êÀÚ·Î °´Ã¼ ³»¿ëÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ÀÌ ¿¬»êÀÚ´Â const°¡ ¾Æ´Ï¾î¾ß Çϴµ¥ ÀÌ·¸°Ô µÉ °æ¿ì »ó¼ö °´Ã¼¿¡ ´ëÇؼ­´Â [ ] ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù´Â Á¦¾àÀÌ »ý±ä´Ù. ¼³»ç »ó¼ö °´Ã¼¿¡ ´ëÇØ [ ] ¿¬»êÀÚ·Î Àб⸸ ÇÑ´Ù ÇÏ´õ¶óµµ ÄÄÆÄÀÏ·¯´Â [ ] ¿¬»êÀÚ ÇÔ¼ö°¡ const ¼Ó¼ºÀ» °¡Áö°í ÀÖÁö ¾ÊÀ¸¹Ç·Î È£ÃâÀ» Çã°¡ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¡¼­ [ ] ¿¬»êÀÚ´Â Ç×»ó »ó¼ö ¹öÀü, ºñ»ó¼ö ¹öÀü µÎ ¹úÀÌ ÇÊ¿äÇÏ´Ù.

C/C++ ¾ð¾îÀÇ [ ] ¿¬»êÀÚ´Â Æ÷ÀÎÅÍ ¿¬»êÀ» Çϵµ·Ï Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ÇÇ¿¬»êÀÚ Áß Çϳª´Â ¹Ýµå½Ã Æ÷ÀÎÅÍÀÌ°í ³ª¸ÓÁö Çϳª´Â ¹Ýµå½Ã Á¤¼ö¿©¾ß ÇÑ´Ù. ±×·¯³ª ¿À¹ö·ÎµùµÇ¸é ¾îµð±îÁö³ª ÇÔ¼ö¿¡ ºÒ°úÇϹǷΠÀÓÀÇÀÇ Å¸ÀÔÀ» Àμö·Î Àü´Þ¹ÞÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ ÇлýµéÀÇ ¸ñ·ÏÀ» °¡Áö´Â StuList Ŭ·¡½º°¡ ÀÖÀ» ¶§ [ ] ¿¬»êÀÚÀÇ Àμö·Î ÇлýÀÇ À̸§(const char *)À» ÁÖ¸é Çйø(int)À» ¸®ÅÏÇÏ´Â int StuList::operator[](const char *) ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼öµµ ÀÖ´Ù.

 

¿¹ Á¦ : StuList

#include <Turboc.h>

 

class StuList

{

private:

     struct Student {

          char Name[10];

          int StNum;

     } S[30];

 

public:

     StuList() {

          strcpy(S[0].Name,"À̽¸¸");S[0].StNum=1;

          strcpy(S[1].Name,"¹ÚÁ¤Èñ");S[1].StNum=3;

          strcpy(S[2].Name,"ÀüµÎȯ");S[2].StNum=6;

          strcpy(S[3].Name,"³ëÅ¿ì");S[3].StNum=9;

          strcpy(S[4].Name,"±è¿µ»ï");S[4].StNum=15;

          strcpy(S[5].Name,"±è´ëÁß");S[5].StNum=17;

          strcpy(S[6].Name,"³ë¹«Çö");S[6].StNum=20;

          strcpy(S[7].Name,"??????");S[7].StNum=100;

     }

     int operator[](const char *Name) {

          for (int i=0;;i++) {

              if (strcmp(S[i].Name,Name)==0) return S[i].StNum;

              if (S[i].Name[0]=='?') return -1;

          }

     }

};

 

void main()

{

     StuList SL;

 

     printf("±è¿µ»ï ÇлýÀÇ ÇйøÀº %d¹øÀÔ´Ï´Ù.\n",SL["±è¿µ»ï"]);

}

 

ÆíÀÇ»ó »ý¼ºÀÚ¿¡¼­ Çлý ¸ñ·ÏÀ» ÀÛ¼ºÇߴµ¥ ½ÇÁ¦ ¿¹¿¡¼­´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ Çлý ¸ñ·ÏÀ» ´ë·®À¸·Î ÀоîµéÀÏ °ÍÀÌ´Ù. ÀÌ Å¬·¡½º°¡ °¡Áø Á¤º¸ Áß ¹®ÀÚ¿­À» Àμö·Î ÁÖ°í ¿øÇÏ´Â Á¤¼ö¸¦ ã´Â ¿ëµµ·Î [ ] ¿¬»êÀÚ¸¦ È°¿ëÇß´Ù. [ ] ¿¬»êÀÚ¸¦ ÀÏÁ¾ÀÇ °Ë»ö ¿¬»êÀÚ·Î Àǹ̸¦ º¯°æÇÏ¿© È°¿ëÇÏ´Â °ÍÀÌ´Ù.