31-1-¶ó.ÀÓÀÇ Å¸ÀÔ Áö¿ø Á¶°Ç

ÇÔ¼ö ÅÛÇø´ÀÇ º»Ã¼ ÄÚµå´Â ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼­µµ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇØ¾ß ÇϹǷΠŸÀÔ¿¡ Á¾¼ÓÀûÀÎ ÄÚµå´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. ±âº» ŸÀÔ¿¡ ´ëÇØ ÀÌ¹Ì ¿À¹ö·ÎµùµÇ¾î ÀÖ´Â +, - µîÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇϰųª 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¿Í ¶È°°Àº ¹æ½ÄÀ¸·Î µ¿ÀÛÇϴ Ŭ·¡½º¸¦ ¸¸µç´Ù¸é °ÅÀÇ ¾ÈÀüÇÏ´Ù. ¿Ö Ŭ·¡½º°¡ ¿ÏÀüÇÑ Å¸ÀÔ Èä³»¸¦ ³»·Á°í ±×Åä·Ï ¸öºÎ¸²À» Ä¡´ÂÁö ÀÌÇØÇÒ ¼ö Àְڴ°¡?