Ŭ·¡½ºÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÏ´Â . ¿¬»êÀÚ´Â ¿ö³« ±âº» ¿¬»êÀÚ¶ó ¿À¹ö·Îµù
±ÝÁöµÇ¾î ÀÖ´Ù. ±×·¯³ª °´Ã¼ Æ÷ÀÎÅͷκÎÅÍ ¸â¹ö¸¦ Àд -> ¿¬»êÀÚ´Â
¿À¹ö·Îµù °¡´ÉÇÏ´Ù. ´Ù¸¥ ¿¬»êÀÚ¿Í ´Þ¸® Ư¼öÇÑ ±ÔÄ¢ÀÌ Àû¿ëµÇ´Âµ¥ ¿ø·¡ ÀÌÇ× ¿¬»êÀÚÁö¸¸ ¿À¹ö·ÎµùÇÏ¸é ´ÜÇ×
¿¬»êÀÚ°¡ µÇ¸ç ¸â¹ö ÇÔ¼ö·Î¸¸ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ Àμö¸¦ ÃëÇÏÁö ¾Ê´Â´Ù.
¸®ÅÏ Å¸ÀÔµµ Á¦¾àÀÌ ÀÖ¾î °´Ã¼ÀÇ Æ÷ÀÎÅ͸¸ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ¿À¹ö·Îµù
¿ëµµ°¡ ¹Ì¸® Á¤ÇØÁ® ÀÖ´Â ¼ÀÀε¥ Æ÷ÇÔ °´Ã¼ÀÇ ¹øÁö¸¦ ¸®ÅÏÇÏ¿© ³»ºÎ ¸â¹ö¸¦ ´ë½Å ÀоîÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. Æ÷ÇÔ
°´Ã¼ÀÇ ¸â¹ö¸¦ ÀÐÀ¸·Á¸é µÎ ¹ø ¿¬°ÅǪ . ¿¬»êÀÚ¸¦ Àû¿ëÇØ¾ß ÇÏÁö¸¸
-> ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇϸé Á÷Á¢ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.
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 ¿¬»êÀÚ´Â ¿À¹ö·ÎµùÇÒ ¼ö ¾øÁö¸¸ ÀÌ ÇÔ¼ö°¡ ¸Þ¸ð¸® ÇÒ´çÀ»
À§ÇØ ³»ºÎÀûÀ¸·Î È£ÃâÇÏ´Â 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++ ¹®¹ýº¸´Ù´Â ¿î¿µÃ¼Á¦ÀÇ
¸Þ¸ð¸® °ü¸® ±â¹ýÀ» Á¤È®ÇÏ°Ô ±¸»çÇØ¾ß ÇÑ´Ù. ¾ð¾î°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸® °ü¸® ±â´É¿¡ ºñÇØ ¿î¿µÃ¼Á¦°¡ Á¦°øÇÏ´Â
¸Þ¸ð¸® °ü¸® ±â´ÉÀº ¼öÁØÀÌ ´Ù¸£´Ù. °íµµÀÇ ¸Þ¸ð¸® °ü¸®°¡ ÇÊ¿äÇÒ ¶§ ÀÌ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇ쵂 ½ÇÁ¦ ±×·¸°Ô±îÁö
ÇÒ °æ¿ì´Â ÈçÇÏÁö ¾Ê´Ù.