°í±Þ ¿¬»êÀÚ ¿À¹ö·Îµù

¸â¹ö ÂüÁ¶ ¿¬»êÀÚ

Ŭ·¡½ºÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÏ´Â . ¿¬»êÀÚ´Â ¿ö³« ±âº» ¿¬»êÀÚ¶ó ¿À¹ö·Îµù ±ÝÁöµÇ¾î ÀÖ´Ù. ±×·¯³ª °´Ã¼ Æ÷ÀÎÅͷκÎÅÍ ¸â¹ö¸¦ Àд -> ¿¬»êÀÚ´Â ¿À¹ö·Îµù °¡´ÉÇÏ´Ù. ´Ù¸¥ ¿¬»êÀÚ¿Í ´Þ¸® Ư¼öÇÑ ±ÔÄ¢ÀÌ Àû¿ëµÇ´Âµ¥ ¿ø·¡ ÀÌÇ× ¿¬»êÀÚÁö¸¸ ¿À¹ö·ÎµùÇÏ¸é ´ÜÇ× ¿¬»êÀÚ°¡ µÇ¸ç ¸â¹ö ÇÔ¼ö·Î¸¸ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ Àμö¸¦ ÃëÇÏÁö ¾Ê´Â´Ù.

¸®ÅÏ Å¸ÀÔµµ Á¦¾àÀÌ ÀÖ¾î °´Ã¼ÀÇ Æ÷ÀÎÅ͸¸ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ¿À¹ö·Îµù ¿ëµµ°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Â ¼ÀÀε¥ Æ÷ÇÔ °´Ã¼ÀÇ ¹øÁö¸¦ ¸®ÅÏÇÏ¿© ³»ºÎ ¸â¹ö¸¦ ´ë½Å ÀоîÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. Æ÷ÇÔ °´Ã¼ÀÇ ¸â¹ö¸¦ ÀÐÀ¸·Á¸é µÎ ¹ø ¿¬°ÅǪ . ¿¬»êÀÚ¸¦ Àû¿ëÇØ¾ß ÇÏÁö¸¸ -> ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇϸé Á÷Á¢ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.

 

MemberAccessOp

#include <stdio.h>

#include <string.h>

 

struct Author {

     char name[32];

     int age;

};

 

class Book

{

private:

     char title[32];

     Author writer;

 

public:

     Book(const char *aTitle, const char *aName, int aAge) {

          strcpy(title, aTitle);

          strcpy(writer.name, aName);

          writer.age = aAge;

     }

     Author *operator->() { return &writer; }

     const char *GetTitle() { return title; }

};

 

int main()

{

     Book android("¾Èµå·ÎÀ̵å Á¤º¹", "±è»óÇü", 29);

     printf("Á¦¸ñ:%s, ÀúÀÚ:%s, ÀúÀÚ ³ªÀÌ:%d¼¼\n",

          android.GetTitle(), android->name, android->age);

}

½ÇÇà°á°ú

Á¦¸ñ:¾Èµå·ÎÀ̵å Á¤º¹, ÀúÀÚ:±è»óÇü, ÀúÀÚ ³ªÀÌ:29¼¼

 

Author Ŭ·¡½º´Â ÀúÀÚÀÇ ½Å»ó Á¤º¸¸¦ Ç¥ÇöÇÑ´Ù. Book Ŭ·¡½º´Â Ã¥¿¡ ´ëÇÑ Á¤º¸¸¦ Ç¥ÇöÇϴµ¥ ÀúÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ Author ŸÀÔÀÇ writer ¸â¹ö¿¡ ÀúÀåÇÑ´Ù. Book Ŭ·¡½º¿¡ Author Ŭ·¡½ºÀÇ °´Ã¼°¡ ÁßøµÇ¾î ÀÖ´Â ÇüÅÂÀÌ´Ù. Book ŸÀÔÀÇ °´Ã¼ android¿¡¼­ ÀúÀÚÀÇ À̸§À» ¾Ë°í ½Í´Ù¸é ¿ø·¡ ´ÙÀ½°ú °°ÀÌ ¾×¼¼½ºÇØ¾ß ÇÑ´Ù.

 

android.writer.name

 

°´Ã¼°¡ ÁßøµÇ¾î ÀÖÀ¸´Ï . ¿¬»êÀÚµµ µÎ ¹ø »ç¿ëÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù. ±×·¯³ª ¸Å¹ø ÀÌ·¸°Ô ¾²±â´Â ºÒÆíÇÏ°í ºñÈ¿À²ÀûÀÌ´Ù. °Ô´Ù°¡ Æ÷ÇÔ °´Ã¼ÀÇ ¼û°ÜÁø ¸â¹ö¸¦ ¿ÜºÎ¿¡¼­ ¸¶À½´ë·Î ÀÐÀ» ¼öµµ ¾ø´Ù. ±×·¡¼­ -> ¿¬»êÀÚ¸¦ Æ÷ÇÔ °´Ã¼ÀÎ writeÀÇ ¹øÁö¸¦ ¸®ÅÏÇϵµ·Ï Á¤ÀÇÇß´Ù. -> ¿¬»êÀÚÀÇ Áº¯Àº ¿ø·¡ °´Ã¼ Æ÷ÀÎÅÍ°¡ ¿Í¾ß ÇÏÁö¸¸ ¿À¹ö·ÎµùÇÏ¸é °´Ã¼°¡ ¿Íµµ »ó°ü¾ø´Ù. ÀÌÁ¦ Æ÷ÇÔ °´Ã¼ÀÇ ¸â¹ö¸¦ ´ÙÀ½°ú °°ÀÌ ¾×¼¼½ºÇÏ¸é µÈ´Ù.

 

android->name

 

-> ¿¬»êÀÚ°¡ writer °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϹǷΠµÚ¿¡ ¹Ù·Î AuthorÀÇ ¸â¹ö¸¦ ¾²¸é µÈ´Ù. nameÀº BookÀÇ ¸â¹ö°¡ ¾Æ´ÏÁö¸¸ ¸¶Ä¡ ÀÚ½ÅÀÇ ¸â¹öó·³ ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¸ç ¼û°ÜÁø ¸â¹ö±îÁöµµ ÀÐÀ» ¼ö ÀÖ´Ù.

ÀϹÝÀûÀÎ ¿ëµµ·Î´Â Àß »ç¿ëÇÏÁö ¾ÊÀ¸¸ç ´ëÇü ¶óÀ̺귯¸®¸¦ ÀÛ¼ºÇÒ ¶§ °´Ã¼¸¦ ·¡ÇÎÇÑ Å¬·¡½º¸¦ ·¡ÇÎµÈ °´Ã¼Ã³·³ ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁØ´Ù. ÀÌ·± °ÍÀ» ½º¸¶Æ® Æ÷ÀÎÅͶó°í Çϴµ¥ Æ÷ÀÎÅÍÀÇ À¯È¿¼º °Ë»ç³ª »ç¿ë Ä«¿îÆ®¸¦ °ü¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.

() ¿¬»êÀÚ

°ýÈ£()µµ ÀÏÁ¾ÀÇ ¿¬»êÀÚÀÌ¸ç ¿À¹ö·Îµù ´ë»óÀÌ´Ù. ÀμöÀÇ °³¼ö°¡ Á¤ÇØÁ® ÀÖÁö ¾Ê¾Æ ÀÓÀÇÀÇ ¿¬»êÀÚ¸¦ ÃëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ Æ¯Â¡À̸ç ÀμöÀÇ °³¼ö³ª ŸÀÔ¿¡ µû¶ó ¿øÇϴ´ë·Î ¾ó¸¶µçÁö ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ°í ÀμöÀÇ µðÆúÆ®°ªÀ» ÁÙ ¼öµµ ÀÖ´Ù.

 

FunCallOp

#include <stdio.h>

 

class Sum

{

public:

     int operator()(int a, int b, int c, int d) {

          return a + b + c + d;

     }

     double operator()(double a, double b) {

          return a + b;

     }

};

 

int main()

{

     Sum s;

     printf("1 + 2 + 3 + 4 = %d\n", s(1, 2, 3, 4));

     printf("1.2 + 3.4 = %f\n", s(1.2, 3.4));

}

½ÇÇà°á°ú

1 + 2 + 3 + 4 = 10

1.2 + 3.4 = 4.600000

 

Sum Ŭ·¡½º´Â Á¤¼ö 4°³ÀÇ ÇÕÀ» ±¸ÇÏ´Â ( ) ¿¬»êÀÚ¿Í ½Ç¼ö 2°³ÀÇ ÇÕÀ» ±¸ÇÏ´Â ( ) ¿¬»êÀÚ¸¦ Á¤ÀÇÇÑ´Ù. main¿¡¼­ Sum ŸÀÔÀÇ °´Ã¼ s¸¦ »ý¼ºÇÏ°í s·ÎºÎÅÍ ( ) ¿¬»êÀÚ¸¦ È£ÃâÇÑ´Ù. s(...) Ç¥Çö½ÄÀº Ŭ·¡½º¸íÀÌ ¾Æ´Ñ °´Ã¼¸íÀ¸·Î È£ÃâÇϹǷΠ»ý¼ºÀÚ È£Ãâ¹®ÀÌ ¾Æ´Ï¶ó ¿¬»êÀÚ ÇÔ¼ö È£Ãâ¹®ÀÌ´Ù. ÄÄÆÄÀÏ·¯´Â ( )ÀÇ Àμö¿­À» º¸°í ÀûÀýÇÑ ¿¬»êÀÚ ÇÔ¼ö¸¦ ã¾Æ È£ÃâÇÑ´Ù.

Sum¿¡´Â º°µµÀÇ ¸â¹ö°¡ ¾ø°í ¿À·ÎÁö ( ) ¿¬»êÀÚ¸¸ Á¤ÀǵǾî ÀÖ´Ù. ±×·¡¼­ °´Ã¼¸¦ »ý¼ºÇÒ ÇÊ¿ä¾øÀÌ Àӽð´Ã¼·ÎºÎÅÍ ( ) ¿¬»êÀÚ¸¦ È£ÃâÇصµ Àß µ¿ÀÛÇÑ´Ù.

 

printf("1 + 2 + 3 + 4 = %d\n", Sum()(1, 2, 3, 4));

printf("1.2 + 3.4 = %f\n", Sum()(1.2, 3.4));

 

Sum()Àº µðÆúÆ® »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© Àӽà °´Ã¼¸¦ ¸¸µé¸ç ÀÌ °´Ã¼ÀÇ ( ) ¿¬»êÀÚ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Àӽà °´Ã¼´Â ÇÔ¼ö°¡ Á¾·áµÉ ¶§ ÀÚµ¿À¸·Î Æı«µÈ´Ù. Ç×»ó °´Ã¼·ÎºÎÅÍ È£ÃâµÇ¹Ç·Î Àü¿ª ÇÔ¼ö·Î´Â Á¤ÀÇÇÒ ¼ö ¾øÀ¸¸ç ¸â¹ö ÇÔ¼ö·Î¸¸ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.

( ) ¿¬»êÀÚ´Â ÇÇ¿¬»êÀÚÀÇ °³¼ö¿¡ Á¦¾àÀÌ ¾ø¾î ÀÔ·ÂÀ» ¾ó¸¶µçÁö ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù. C ¾ð¾îÀÇ ¿¬»êÀÚ´Â ÃÖ´ë 3°³±îÁöÀÇ Àμö¸¸ ¹ÞÁö¸¸ ( ) ¿¬»êÀÚ´Â ÄÞ¸¶·Î ±¸ºÐ¸¸ Çϸé ÇÊ¿äÇѸ¸Å­ Àμö¸¦ ¹Þ´Â´Ù.

 

ScoreManager

#include <stdio.h>

#include <memory.h>

 

class ScoreManager

{

private:

     // ¼ºÀûÀ» ÀúÀåÇÏ´Â ¿©·¯ °¡Áö ¸â¹ö º¯¼öµé

     int ar[3][5][10][4];

public:

     ScoreManager() { memset(ar, 0, sizeof(ar)); }

     int &operator()(int Grade, int Class, int StNum, const char *Subj) {

          return ar[Grade][Class][StNum][0];

     }

     const int &operator()(int Grade, int Class, int StNum, const char *Subj) const {

          return ar[Grade][Class][StNum][0];

     }

};

 

int main()

{

     ScoreManager sm;

 

     printf("1Çгâ 2¹Ý 3¹ø ÇлýÀÇ ±¹¾î ¼ºÀû = %d\n", sm(1, 2, 3, "±¹¾î"));

     sm(2, 3, 4, "»ê¼ö") = 99;

}

 

ScoreManager Ŭ·¡½º´Â ¼ºÀûÀ» °ü¸®Çϴµ¥ ¼ºÀû Á¶»ç¸¦ À§ÇØ Çгâ, ¹Ý, ¹øÈ£, °ú¸ñÀÇ 4°¡Áö³ª µÇ´Â ÀÔ·ÂÀÌ ÇÊ¿äÇÏ´Ù. ( ) ¿¬»êÀÚ´Â ÀÌ ¸ðµç Á¤º¸¸¦ ÀÔ·Â¹Þ¾Æ ³»ºÎ ÀÚ·á·ÎºÎÅÍ ¿øÇÏ´Â ¼ºÀûÀ» Á¶»çÇÏ¿© ¸®ÅÏÇÑ´Ù. ÀÌ·¸°Ô Á¶»çµÈ ¼ºÀûÀº Á¿캯¿¡ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠ»ó¼ö ¹öÀü°ú ºñ»ó¼ö ¹öÀüÀ» °¢°¢ Á¦°øÇÑ´Ù. ( ) ¿¬»êÀÚ°¡ ¸®ÅÏÇÑ °ªÀ» ÀÐÀ» ¼öµµ ÀÖ°í ( ) ¿¬»êÀÚ°¡ ¸®ÅÏÇÑ ´ë»óÀ» ¹Ù²Ü ¼öµµ ÀÖ´Ù.

Ŭ·¡½º´Â ¼Ó¼º°ú µ¿ÀÛÀ» °¡ÁüÀ¸·Î½á ¼¼»óÀÇ ¸ðµç »ç¹°À» ´Ù Èä³»³¾ ¼ö ÀÖ´Ù. Æ÷ÀÎÅ͸¦ ·¡ÇÎÇϰųª ÇÔ¼ö¸¦ ·¡ÇÎÇϱ⵵ Çϴµ¥ ÇÔ¼ö¸¦ Èä³»³»´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¶§ ( ) ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. À§ ¿¹Á¦ÀÇ sm °´Ã¼´Â ¸¶Ä¡ ÇÔ¼öó·³ µ¿ÀÛÇÑ´Ù. ÀÌó·³ ÇÔ¼ö¸¦ Èä³»³»´Â Ŭ·¡½º¸¦ ÇÔ¼ö °´Ã¼(Functor)¶ó°í Çϴµ¥ ÀϹÝÈ­µÈ ¾Ë°í¸®ÁòÀÇ µ¿ÀÛ¿¡ º¯È­¸¦ ÁÖ±â À§ÇØ ÈçÈ÷ »ç¿ëµÈ´Ù.

new, delete

new ¿¬»êÀÚ´Â °´Ã¼¸¦ À§ÇÑ ÈüÀ» ÇÒ´çÇÑ ÈÄ »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© ÃʱâÈ­ÇÏ°í delete ¿¬»êÀÚ´Â Æı«ÀÚ¸¦ È£ÃâÇÑ ÈÄ ¸Þ¸ð¸®¸¦ ȸ¼öÇÑ´Ù. °´Ã¼¸¦ ¸¸µé ¶§ »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â µ¿ÀÛÀº ¾ð¾î°¡ ±ÔÁ¤ÇÑ °ÍÀ̾ ¿À¹ö·Îµù ´ë»óÀÌ ¾Æ´Ï´Ù. ±×·¯³ª ¸Þ¸ð¸®¸¦ ÇÒ´ç, ÇØÁ¦ÇÏ´Â µ¿ÀÛÀº ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù.

Áï new ¿¬»êÀÚ´Â ¿À¹ö·ÎµùÇÒ ¼ö ¾øÁö¸¸ ÀÌ ÇÔ¼ö°¡ ¸Þ¸ð¸® ÇÒ´çÀ» À§ÇØ ³»ºÎÀûÀ¸·Î È£ÃâÇÏ´Â operator new´Â ¿À¹ö·Îµù °¡´ÉÇÏ´Ù. ±â¹ý¿¡ ºñÇØ ½Ç¿ë¼ºÀÌ ³ôÁö ¾ÊÀ¸¹Ç·Î µÎ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏ´Â ¿¹¸¸ »ìÆì º¸ÀÚ.

 

newOverload

#include <stdio.h>

#include <malloc.h>

 

void *operator new(size_t t)

{

     return malloc(t);

}

 

void operator delete(void *p)

{

     free(p);

}

 

int main()

{

     int *pi = new int;

     *pi = 1234;

     printf("%d\n", *pi);

     delete pi;

}

½ÇÇà°á°ú

1234

 

new ¿¬»êÀÚ´Â mallocÀ» È£ÃâÇÏ¿© C Çü½ÄÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í delete´Â free¸¦ È£ÃâÇÏ¿© ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. ¸Þ¸ð¸® ÇÒ´ç, ÇØÁ¦ ¹æ½Ä¸¸ ¹Ù²Ù¾úÀ» »Ó »ý¼ºÀÚ, Æı«ÀÚÀÇ È£ÃâÀ» »ý·«ÇÑ °ÍÀº ¾Æ´Ï´Ù. new int(1234)·Î È£ÃâÇÏ¸é »ý¼º°ú µ¿½Ã¿¡ ÃʱâÈ­µµ Àß µÈ´Ù. ¹è¿­À» ÇÒ´çÇÏ´Â new [], delete [] µµ ¹°·Ð ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù.

ÀÌ ¿¹Á¦´Â µÎ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Ù´Â °Í¸¸ È®ÀÎÇØ ºÃ´Âµ¥ ¾ó¸¶µçÁö ´Ù¸¥ ÇÒ´ç ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Win32ÀÇ °¡»ó ¸Þ¸ð¸®¸¦ È°¿ëÇÏ¸é ¿¹¾à°ú È®Á¤ ´Ü°è¸¦ ÅëÇØ ¸Þ¸ð¸®¸¦ ¼¶¼¼ÇÏ°Ô °ü¸®ÇÒ ¼ö ÀÖ°í °¢ ¸Þ¸ð¸®¿¡ ±ÇÇÑÀ» ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ¶Ç ¸Þ¸ð¸® ÇÒ´ç, ÇØÁ¦°¡ ºó¹øÇÏ´Ù¸é ¸Þ¸ð¸® Ç®À» ¸¶·ÃÇÏ¿© °´Ã¼³¢¸® µ¹·Á°¡¸ç ¾²´Â ¹æ½ÄÀ¸·Î ´ÜÆíÈ­¸¦ ¹æÁöÇϱ⵵ ÇÑ´Ù.

ÀÌ ¿¬»êÀÚ¸¦ Á¦´ë·Î Á¤ÀÇÇϱâ À§Çؼ­´Â C++ ¹®¹ýº¸´Ù´Â ¿î¿µÃ¼Á¦ÀÇ ¸Þ¸ð¸® °ü¸® ±â¹ýÀ» Á¤È®ÇÏ°Ô ±¸»çÇØ¾ß ÇÑ´Ù. ¾ð¾î°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸® °ü¸® ±â´É¿¡ ºñÇØ ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸® °ü¸® ±â´ÉÀº ¼öÁØÀÌ ´Ù¸£´Ù. °íµµÀÇ ¸Þ¸ð¸® °ü¸®°¡ ÇÊ¿äÇÒ ¶§ ÀÌ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇ쵂 ½ÇÁ¦ ±×·¸°Ô±îÁö ÇÒ °æ¿ì´Â ÈçÇÏÁö ¾Ê´Ù.