ÇÔ¼ö ÅÛÇø´ÀÇ º»Ã¼ ÄÚµå´Â ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼µµ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇØ¾ß ÇϹǷΠŸÀÔ¿¡ Á¾¼ÓÀûÀÎ ÄÚµå´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. ±âº» ŸÀÔ¿¡ ´ëÇØ ÀÌ¹Ì ¿À¹ö·ÎµùµÇ¾î ÀÖ´Â +, - µîÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇϰųª cout°ú °°ÀÌ ÇÇ¿¬»êÀÚÀÇ Å¸ÀÔÀ» ½º½º·Î ÆÇº°ÇÒ ¼ö ÀÖ´Â Äڵ常 »ç¿ëÇØ¾ß ÇÑ´Ù. printf ÇÔ¼öó·³ ŸÀÔ¿¡ µû¶ó ¼½ÄÀ» ¹Ì¸® °áÁ¤ÇØ¾ß ÇÏ´Â ÇÔ¼ö´Â ÇÔ¼ö ÅÛÇø´¿¡¼ ¾²Áö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ º¸ÀÚ.
template <typename T>
void PrintValue(T value)
{
printf("value is %d\n",value);
}
ÅÛÇø´À¸·Î µÇ¾î ÀÖ¾î¼ ÀÓÀÇÀÇ Å¸ÀÔÀ» ¹ÞÀ» ¼ö´Â ÀÖÁö¸¸ Ãâ·Â Äڵ忡¼ %d ¼½ÄÀ» »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î »ç½Ç»ó Á¤¼ö ȣȯ ŸÀÔ¸¸ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. Á¤¼ö ÀÌ¿ÜÀÇ Å¸ÀÔÀ» %d ¼½ÄÀ¸·Î Ãâ·ÂÇÏ¸é ¾î¶² °ªÀÌ Ãâ·ÂµÉ Áö ¾Ë ¼ö ¾ø´Ù. Á» ´õ ¹ü¿ë¼ºÀ» ³ôÀÌ·Á¸é coutÀ¸·Î Ãâ·ÂÇÏ´Â °ÍÀÌ À¯¸®Çѵ¥ coutÀº ÀÓÀÇ Å¸ÀÔÀ» Ãâ·ÂÇÒ ¼ö ÀÖ°í »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔµµ << ¿¬»êÀÚ¸¸ ÀûÀýÇÏ°Ô ¿À¹ö·ÎµùµÇ¾î ÀÖÀ¸¸é ¶È°°Àº ¹æ¹ýÀ¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
¾Õ ¿¹Á¦ÀÇ Add ÇÔ¼ö ÅÛÇø´Àº + ¿¬»êÀÚ·Î ÇÇ¿¬»êÀÚ¸¦ ´õÇϴµ¥ + ´Â ´ëºÎºÐÀÇ ±âº» ŸÀÔ¿¡ ´ëÇØ ¿À¹ö·ÎµùµÇ¾î ÀÖÀ¸¹Ç·Î ¾Æ¹« ŸÀÔÀ̳ª Àß ´õÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ±×·¯³ª ÀÌ ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ´Â Á¤¼ö, ½Ç¼ö, ¹®ÀÚÇü µîÀÇ ¼öÄ¡Çü¿¡ ´ëÇØ¼¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ» »ÓÀÌ´Ù. ¹®ÀÚ¿(char *)À» ´õÇÒ ¶§´Â Æ÷ÀÎÅͳ¢¸® ´õÇÒ ¼ö ¾øÀ¸¹Ç·Î strcat ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ´õÇÏ´Â ¾Ë°í¸®ÁòÀÌ ¿ÏÀüÈ÷ ´Ù¸£¹Ç·Î Add ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ¹°·Ð + ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇϰí ÀÖ´Â ¹®ÀÚ¿ °´Ã¼¶ó¸é ÀÌ ÇÔ¼ö·Î ¿¬°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÅÛÇø´ º»Ã¼¿¡ »ç¿ëµÈ ¸ðµç ÄÚµå¿Í ȣȯµÇ´Â ŸÀÔ¿¡ ´ëÇØ¼¸¸ ±¸Ã¼ÈÇÒ ¼ö ÀÖ´Ù. µÎ °ª Áß Å« °ªÀ» ã´Â Max ÅÛÇø´Àº ´Ü¼øÈ÷ > ¿¬»êÀÚ¿Í »ïÇ× Á¶°Ç ¿¬»êÀÚ¸¸À¸·Î °ªÀÇ ´ë¼Ò¸¦ ÆÇ´ÜÇÒ »ÓÀÌ´Ù. Áö±ØÈ÷ °£´ÜÇØ¼ º°´Ù¸¥ Á¦¾àÀÌ ¾øÀ» °Í °°Áö¸¸ ÀÌ °£´ÜÇÑ ÅÛÇø´µµ ¾È ÅëÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
|
¿¹ Á¦ : MaxObject |
#include <Turboc.h>
template <typename T>
T Max(T a, T b)
{
return (a > b) ? a:b;
}
struct S {
int i;
S(int ai) : i(ai) { }
//operator >(S &Other) { return i > Other.i; }
};
void main()
{
int i1=3,i2=4;
double d1=1.2,d2=3.4;
S s1(1),s2(2);
Max(i1,i2);
Max(d1,d2);
Max(s1,s2);
}
Max´Â µÎ °ª Áß Å« °ªÀ» ¸®ÅÏÇϴµ¥ Á¤¼ö³ª ½Ç¼ö¿¡ ´ëÇØ¼´Â Àß µ¿ÀÛÇÑ´Ù. ±×·¯³ª ±¸Á¶Ã¼ S¿¡ ´ëÇØ¼´Â µ¿ÀÛÇÏÁö ¾Ê´Âµ¥ ±¸Á¶Ã¼³¢¸®´Â > ¿¬»êÀÚ·Î ºñ±³ÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ±¸Á¶Ã¼¿¡ > ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇØ ³õÀ¸¸é À̶§´Â S°´Ã¼³¢¸® ´ë¼Ò ºñ±³°¡ °¡´ÉÇØ Áö¹Ç·Î Max(s1, s2) È£Ãâµµ Àß ÄÄÆÄÀϵȴÙ. S°¡ > ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇÏÁö ¾Ê´õ¶óµµ ÀÌ È£ÃâÀ» ÁÖ¼®À¸·Î ó¸®Çϸé Max(S, S)°¡ ±¸Ã¼ÈµÇÁö ¾ÊÀ¸¹Ç·Î ¾Æ¹« ÀÏ ¾ø´Ù´Â µí Àß ÄÄÆÄÀϵȴÙ.
ÄÄÆÄÀÏ·¯´Â ±¸Ã¼ÈµÈ ÅÛÇø´ ÇÔ¼ö¿¡ ´ëÇØ¼¸¸ ¿¡·¯ üũ¸¦ ÇÒ »ÓÀÌÁö ÅÛÇø´ ÀÚü¿¡ ´ëÇØ¼´Â »ó¼¼ÇÑ Á¡°ËÀ» ÇÒ ¼ö ¾ø´Ù. ÅÛÇø´À» Á¤ÀÇÇÒ ¶§´Â ¾î¶² ŸÀÔÀÌ Àü´ÞµÉÁö ¸ð¸£¹Ç·Î ÄÄÆÄÀÏ·¯´Â ÅÛÇø´ÀÇ ¸ð¾ç¸¸ ±â¾ïÇØ µÑ »Ó ±¸¹®»óÀÇ ¿¡·¯ üũ¸¦ ÇÏÁö ¾Ê´Â´Ù. ½ÉÁö¾î ´ÙÀ½°ú °°Àº ÅÛÇø´µµ ¾Æ¹« ¹®Á¦¾øÀÌ ÄÄÆÄÀϵȴÙ.
template <typename T>
void Some(T arg)
{
arg.ar[34]=arg.next;
arg.next->value=1234;
}
ÀÌ ÅÛÇø´Àº Àμö·Î Àü´Þ¹ÞÀº arg°¡ ±¸Á¶Ã¼À̰í ÀÌ ±¸Á¶Ã¼¾È¿¡ Å©±â°¡ ÃÖ¼ÒÇÑ 35ÀÌ»óÀÎ ar ¹è¿ÀÌ ¸â¹ö·Î Æ÷ÇԵǾî ÀÖÀ¸¸ç next´Â ´Ù¸¥ ±¸Á¶Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀ̰í next°¡ °¡¸®Å°´Â ±¸Á¶Ã¼ÀÇ value ¸â¹ö´Â Á¤¼öÇü º¯¼ö¶ó´Â °ÍÀ» °¡Á¤Çϰí ÀÖ´Ù. ÀÌ °¡Á¤ÀÌ ¸Â´ÂÁö ¾Æ´ÑÁö´Â ½ÇÁ¦·Î Àü´ÞµÇ´Â T°¡ ¾î¶² ŸÀÔÀΰ¡¿¡ µû¶ó ´Þ¶óÁö´Â °ÍÀ̹ǷΠÄÄÆÄÀÏ·¯´Â ±¸Ã¼ÈµÉ ¶§±îÁö´Â ¿¡·¯ üũ¸¦ º¸·ùÇÒ ¼ö¹Û¿¡ ¾ø´Â °ÍÀÌ´Ù. ¿ÀŸ°¡ Àְųª if = for + while; °°Àº ¸»µµ ¾ÈµÇ´Â ±¸¹®±îÁöµµ ÀÏ´ÜÀº ÄÄÆÄÀϵȴÙ.
ÅÛÇø´Àº Àμö·Î Àü´ÞµÈ ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÒ ¼ö ÀÖ´Â ÇÔ¼öÀÇ ÇüƲÀÌÁö¸¸ ±× º»Ã¼¿¡¼´Â Àü´ÞµÉ¸¸ÇÑ Å¸ÀÔÀ» ¸ðµÎ Áö¿øÇÏ´Â ¹ü¿ëÀûÀÎ Äڵ常 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¶Ç´Â ÅÛÇø´À¸·Î Àü´ÞµÈ ŸÀÔÀÌ ÇØ´ç ÅÛÇø´ÀÇ º»Ã¼ ÄÚµåÀÇ ¿ä±¸ Á¶°ÇÀ» ¸ðµÎ ¸¸Á·ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì Àß »ç¿ëÇÏ´ø ÅÛÇø´µµ ƯÁ¤ ŸÀÔ¿¡ ´ëÇØ ±¸Ã¼ÈÇßÀ» ¶§ °©Àڱ⠿¡·¯°¡ ¹ß»ýÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦·Î Å×½ºÆ®ÇØ º¸ÀÚ.
|
¿¹ Á¦ : SwapPerson |
#include <Turboc.h>
template <typename T>
void Swap(T &a, T &b)
{
T t;
t=a;a=b;b=t;
}
class Person
{
private:
char *Name;
int Age;
public:
Person() {
Name=new char[1];
Name[0]=NULL;
Age=0;
}
Person(const char *aName, int aAge) {
Name=new char[strlen(aName)+1];
strcpy(Name,aName);
Age=aAge;
}
Person(const Person &Other) {
Name=new char[strlen(Other.Name)+1];
strcpy(Name,Other.Name);
Age=Other.Age;
}
/*
Person &operator =(const Person &Other) {
if (this != &Other) {
delete [] Name;
Name=new char[strlen(Other.Name)+1];
strcpy(Name,Other.Name);
Age=Other.Age;
}
return *this;
}
//*/
virtual ~Person() {
delete [] Name;
}
virtual void OutPerson() {
printf("À̸§ : %s ³ªÀÌ : %d\n",Name,Age);
}
};
void main()
{
Person A("À̽¸¸",10);
Person B("¹ÚÁ¤Èñ",20);
A.OutPerson();B.OutPerson();
Swap(A,B);
A.OutPerson();B.OutPerson();
}
¿¹Á¦ÀÇ ¼±µÎ¿¡´Â ¾Õ¿¡¼ ¸¸µé¾î¼ ÀÌ¹Ì Å×½ºÆ®°¡ ¿Ï·áµÈ Swap ÅÛÇø´ÀÌ Á¤ÀǵǾî ÀÖ´Ù. º¯¼ö ±³È¯ ¾Ë°í¸®ÁòÀÌ ¿ö³« °£´ÜÇØ¼ º° ¹®Á¦°¡ ¾øÀ» °Í °°Áö¸¸ Person °´Ã¼¿¡ ´ëÇØ¼´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ¸¸ç ³¡³¾ ¶§ ´Ù¿îµÈ´Ù. Swap ÅÛÇø´Àº º¯¼ö°ª ±³È¯À» À§ÇØ ¼¼ ¹ø ´ëÀÔÀ» ÇϹǷΠÀÌ Äڵ尡 ÀÌ»ó¾øÀÌ µ¿ÀÛÇÏ·Á¸é ´ëÀÔÀÌ °¡´ÉÇØ¾ß ÇÏ°í ´ëÀÔ¿¡ ÀÇÇØ º°´Ù¸¥ ¹®Á¦°¡ ¾ø¾î¾ß ÇÑ´Ù. ±×·¯³ª ¿¹Á¦ÀÇ Person Ŭ·¡½º´Â ´ëÀÔ ¿¬»êÀÚ¸¦ Á¦´ë·Î Á¤ÀÇÇÏÁö ¾Ê¾Æ ÅÛÇø´ÀÇ ÄÚµå¿Í´Â ¸ÂÁö ¾Ê´Ù.
Person °´Ã¼ A¿Í B¿¡ ´ëÇØ Swap(A,B)¸¦ È£ÃâÇßÀ» ¶§ ¾î¶² ÀϵéÀÌ ¹ú¾îÁö´ÂÁö »ó»óÇØ º¸ÀÚ. ÄÄÆÄÀÏ·¯´Â ÇÔ¼ö È£ÃâºÎÀÇ Å¸ÀÔÀ» º¸°í Swap(Person, Person) ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÏ¿© Çü½Ä Àμö a, b·Î ½ÇÀμö A, B¸¦ Àü´ÞÇÑ´Ù. Person¿¡´Â º¹»ç »ý¼ºÀÚ°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ¿©±â±îÁö´Â ¾ÆÁÖ Á¤»óÀûÀÌ´Ù. ±×·¯³ª ±³È¯À» À§ÇØ a¸¦ t¿¡ ´ëÀÔÇÏ´Â ¼ø°£ t´Â ¾èÀº º¹»ç¿¡ ÀÇÇØ a¿Í ¹öÆÛ¸¦ °øÀ¯ÇÏ°Ô µÇ¸ç ÀÌ »óÅ¿¡¼ tÀÇ °ªÀ» b°¡ ´ëÀÔ¹Þ¾Ò´Ù. Swap ÇÔ¼ö°¡ Á¾·áµÉ ¶§ a´Â bÀÇ °ªÀ» ¹«»çÈ÷ ´ëÀÔ¹Þ¾ÒÁö¸¸ b¿Í t°¡ ¹öÆÛ¸¦ °øÀ¯Çϸç Áö¿ª °´Ã¼ t°¡ ÆÄ±«µÇ¸é¼ bÀÇ ¹öÆÛ¸¦ Á¤¸®ÇØ ¹ö¸°´Ù. mainÀ¸·Î µ¹¾Æ ¿ÔÀ» ¶§ ½ÇÀμö BÀÇ ¹öÆÛ°¡ ÀÌÁß ÇØÁ¦µÇ¹Ç·Î ´Ù¿îµÇ´Â °ÍÀÌ´Ù.

Ʋ¸° ÄÚµåÀÓ¿¡µµ ºÒ±¸Çϰí ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ´ëÀÔ ¿¬»êÀÚ´Â µðÆúÆ®°¡ ÀÖÀ¸¹Ç·Î ÀÏ´Ü ´ëÀÔÀº °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. µðÆúÆ® ´ëÀÔ ¿¬»êÀÚ¿¡ ÀÇÇÑ ¾èÀº º¹»ç°¡ ¹®Á¦ÀÇ ¿øÀÎÀ̾úÀ¸¹Ç·Î ±íÀº º¹»ç¸¦ ÇÏ´Â ´ëÀÔ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ¸é ¹®Á¦°¡ ÇØ°áµÈ´Ù. ¿¹Á¦ÀÇ ÁÖ¼®À¸·Î ¹¿©ÀÖ´Â ´ëÀÔ ¿¬»êÀÚ¸¦ Ç®¾î º¸¸é ¾Æ¹« ÀÌ»ó¾øÀÌ Àß µ¿ÀÛÇÒ °ÍÀÌ´Ù.
ÅÛÇø´Àº Áö±Ý ´çÀå Àß ÄÄÆÄÀϵǰí ÀÌ»ó¾øÀÌ µ¿ÀÛÇÏ´Â °Íó·³ º¸ÀÌ´õ¶óµµ ŸÀÔÀÌ ¹Ù²î¸é ¾î¶»°Ô µÉÁö Àå´ãÇÒ ¼ö ¾ø´Ù. ¿Ïº®ÇÒ ¼ö´Â ¾ø°ÚÁö¸¸ ÅÛÇø´Àº °¡±ÞÀûÀÌ¸é ¸¹Àº ŸÀÔÀ» Áö¿øÇÒ ¼ö ÀÖµµ·Ï ¹ü¿ëÀûÀÎ Äڵ带 ÀÛ¼ºÇØ¾ß Çϸç ÅÛÇø´ÀÇ Àμö·Î »ç¿ëµÉ Ŭ·¡½º´Â ÅÛÇø´ º»Ã¼°¡ ¿ä±¸ÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇØ¾ß ÇÑ´Ù. °¡Àå ÀÌ»óÀûÀΠŸÀÔÀº ±âº» ŸÀÔÀÎ intÀ̹ǷΠint¿Í ¶È°°Àº ¹æ½ÄÀ¸·Î µ¿ÀÛÇϴ Ŭ·¡½º¸¦ ¸¸µç´Ù¸é °ÅÀÇ ¾ÈÀüÇÏ´Ù. ¿Ö Ŭ·¡½º°¡ ¿ÏÀüÇÑ Å¸ÀÔ Èä³»¸¦ ³»·Á°í ±×Åä·Ï ¸öºÎ¸²À» Ä¡´ÂÁö ÀÌÇØÇÒ ¼ö Àְڴ°¡?