31-1-¸¶.Ư¼öÈ­

°°Àº ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁø ÇÔ¼ö´Â ŸÀÔ¸¸ Á¦¿ÜÇÏ°í µ¿ÀÏÇÑ º»Ã¼¸¦ °¡Áö¹Ç·Î µ¿ÀÛµµ µ¿ÀÏÇÏ´Ù. ¸¸¾à ƯÁ¤ ŸÀÔ¿¡ ´ëÇØ¼­¸¸ ´Ù¸£°Ô µ¿ÀÛÇϵµ·Ï ÇÏ°í ½Í´Ù¸é À̶§´Â Ư¼öÈ­(Specialization)¶ó´Â ±â¹ýÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Swap ÇÔ¼ö¸¦ ½Ç¼ö¿¡ ´ëÇØ Àû¿ëÇÒ ¶§´Â °ªÀ» ÀüºÎ ±³È¯ÇÏÁö ¸»°í Á¤¼öºÎ¸¸ ±³È¯ÇÏ°í ½Í´Ù°í ÇÏÀÚ. ÀÌ·² ¶§´Â double Çü¿¡ ´ëÇØ¼­ Ư¼öÇÑ ÇÔ¼ö¸¦ Çϳª ¸¸µé¸é µÈ´Ù.

 

¿¹ Á¦ : Specialization

#include <Turboc.h>

 

template <class T>

void Swap(T &a, T &b)

{

     T t;

     t=a;a=b;b=t;

}

 

template <> void Swap<double>(double &a, double &b)

{

     int i,j;

 

     i=(int)a;

     j=(int)b;

     a=a-i+j;

     b=b-j+i;

}

 

void main()

{

     double a=1.2,b=3.4;

     printf("before a=%g, b=%g\n",a,b);

     Swap(a,b);

     printf("after a=%g, b=%g\n",a,b);

}

 

Swap ÇÔ¼ö ÅÛÇø´À» Á¤ÀÇÇØ µÎ°í doubleÇü¿¡ ´ëÇØ¼­ Ưº°ÇÑ Swap ÇÔ¼ö¸¦ µû·Î Á¤ÀÇÇß´Ù. double¿¡ ´ëÇØ Ư¼öÈ­µÈ Swap ÇÔ¼öÀÇ º»Ã¼´Â Á¤¼öºÎ¸¸ ±³È¯ÇÏ´Â °íÀ¯ÇÑ Äڵ带 °¡Áø´Ù. main ¿¡¼­´Â µÎ °³ÀÇ ½Ç¼ö¸¦ Swap ÇÔ¼ö·Î ±³È¯Çߴµ¥ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

before a=1.2, b=3.4

after a=3.2, b=1.4

 

¸¸¾à double¿¡ ´ëÇÑ Æ¯¼öÈ­¸¦ ÇÏÁö ¾ÊÀ¸¸é ÀϹÝÀûÀÎ Swap ÇÔ¼ö°¡ È£ÃâµÇ¾î ¼Ò¼öºÎ, ½Ç¼öºÎ°¡ °°ÀÌ ¹Ù²ð °ÍÀÌ´Ù. ÄÄÆÄÀÏ·¯´Â ÅÛÇø´ ÇÔ¼ö È£Ãâ ±¸¹®ÀÌ ÀÖÀ» ¶§ Ç×»ó ÅÛÇø´ÀÇ Á¤ÀǺ¸´Ù Ư¼öÈ­µÈ Á¤ÀÇ¿¡ ¿ì¼±±ÇÀ» ÁֹǷΠµ¿ÀÏÇÑ À̸§ÀÇ ÅÛÇø´°ú Ư¼öÈ­ ÇÔ¼ö°¡ Á¸ÀçÇÏ¸é Æ¯¼öÈ­µÈ ÇÔ¼ö°¡ È£ÃâµÈ´Ù. Ư¼öÈ­ ÇÔ¼ö¸¦ Ç¥±âÇÏ´Â ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ ÀÖ´Ù.

 

¨ç template <> void Swap<double>(double &a, double &b)

¨è template <> void Swap<>(double &a, double &b)

¨é template <> void Swap(double &a, double &b)

¨ê void Swap<double>(double &a, double &b)

¨ë void Swap<>(double &a, double &b)

¨ì void Swap(double &a, double &b)

 

Ư¼öÈ­µÈ ÇÔ¼ö¶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ template <> ·Î ½ÃÀÛÇϴµ¥ <>°¡ ¾øÀ¸¸é ¸í½ÃÀû ±¸Ã¼È­ ±¸¹®ÀÌ µÇ¹Ç·Î Àß ±¸ºÐÇØ¾ß ÇÑ´Ù. ÇÔ¼ö À̸§ µÚ¿¡´Â ¾î¶² ŸÀÔ¿¡ ´ëÇÑ Æ¯¼öÈ­ ÇÔ¼öÀÎÁö <> °ýÈ£¿Í Ư¼öÈ­µÈ ŸÀÔ À̸§À» ¹àÈù´Ù. ¨ç¹ø Ç¥±â¹ýÀÌ °¡Àå ¿ÏÀüÇÑ ÇüÅÂÀÌµÇ Á» ´õ °£·«ÇÑ Ç¥±â¹ýµµ ¾µ ¼ö ÀÖ´Ù. ¾î¶² ŸÀÔ¿¡ ´ëÇØ Ư¼öÈ­µÇ¾ú´ÂÁö´Â ¾îÂ÷ÇÇ ÀμöÀÇ Å¸ÀÔÀ¸·Îµµ ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ÇÔ¼ö¸í ´ÙÀ½ÀÇ <> °ýÈ£´Â »ý·« °¡´ÉÇϸç <>¸¸ ³²°Ü µÎ°í ŸÀÔ¸¸ »ý·«ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ´Ü, ÅÛÇø´ Àμö°¡ ¸®ÅÏ Å¸ÀÔÀ̳ª ³»ºÎ Áö¿ªº¯¼ö·Î »ç¿ëµÉ ¶§´Â ¨ç¹ø ŸÀÔ¸¸ °¡´ÉÇÏ´Ù.

¶ÇÇÑ ¨ê¹øÃ³·³ ÇÔ¼ö¸í ´ÙÀ½¿¡ <> °ýÈ£°¡ ÀÖ´Ù¸é ÀÌ Ç¥±â·ÎºÎÅÍ ÇÔ¼ö ÅÛÇø´¿¡ ´ëÇÑ Æ¯¼öÈ­ ÇÔ¼ö¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ¾ÕÂÊÀÇ template <> µµ »ý·« °¡´ÉÇÏ´Ù. ÀÌ Ç¥±â¹ýÀº ±¸Çü ÄÄÆÄÀÏ·¯µéÀÌ ÁÖ·Î »ç¿ëÇÏ´ø ¹æ¹ýÀÌ¸ç ¨ë¹øÃ³·³ <> °ýÈ£¾È¿¡ ŸÀÔ¸íÀ» »ý·«Çصµ »ó°ü¾ø´Ù. ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯°¡ ¾ÆÁ÷±îÁöµµ ÀÌ Ç¥±â¹ýÀ» Áö¿øÇϰí´Â ÀÖÁö¸¸ ÃֽŠǥÁØ¿¡´Â ÀÌ Ç¥±â¹ýÀÌ ÀÎÁ¤µÇÁö ¾ÊÀ¸¹Ç·Î °¡±ÞÀû »ç¿ëÀ» ÀÚÀçÇØ¾ß ÇÑ´Ù.

 Æ¯¼öÈ­ ÇÔ¼ö¸¦ Ç¥±âÇÏ´Â ¹æ¹ýÀÌ ¿Ö ÀÌ·¸°Ô ¸¹Àº°¡ Çϸé ÅÛÇø´À̶ó´Â ±â´ÉÀÌ Ã³À½ºÎÅÍ Ç¥ÁØ¿¡ ÀÇÇØ Á¤¸³µÈ °ÍÀÌ ¾Æ´Ï¶ó °¢ ÄÄÆÄÀÏ·¯ Á¦ÀÛ»çµé¿¡ ÀÇÇØ ºñ°ø½ÄÀûÀ¸·Î ¹ßÀüÇØ ¿À´Ù°¡ ºñ±³Àû ÃÖ±Ù¿¡ Ç¥ÁØÀ¸·Î äÅõǾú±â ¶§¹®ÀÌ´Ù. Ç¥ÁØÀÌ Á¦Á¤µÇ¾ú´Ù°í ÇØ¼­ ÀÌÀü¿¡ »ç¿ëÇÏ´ø Çü½ÄÀ» ¹«½ÃÇÒ ¼ö´Â ¾ø±â ¶§¹®¿¡ ÀÌ·± ¸¹Àº Ç¥±â¹ýµéÀÌ ³­¹«ÇÏ´Â »óȲÀÌ µÇ¾ú´Âµ¥ ÀÌ·± ¸éÀ» º¸¸é Ç¥ÁØÀÌ ¾ó¸¶³ª Áß¿äÇѰ¡¸¦ ¾Ë ¼ö ÀÖ´Ù. Ç¥ÁØ Á¦Á¤ÀÌ ´Ê¾îÁö¸é º¯Á¾µéÀÌ »ý°Ü ¿©·¯ »ç¶÷µéÀÌ ÇǰïÇØÁø´Ù.

¸¶Áö¸· ¨ì¹ø Çü½ÄÀº Ư¼öÈ­ ÇÔ¼ö°¡ ¾Æ´Ï¶ó ±×³É ÀÏ¹Ý ÇÔ¼ö SwapÀ» Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÀÏ¹Ý ÇÔ¼ö¸¦ Á¤ÀÇÇØµµ ÀÏ´ÜÀº ¸ñÀûÀ» ÀÌ·ê ¼ö ÀÖÁö¸¸ ¿ì¼± ¼øÀ§ÀÇ ¹®Á¦°¡ ÀÖ¾î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ÇÔ¼ö ÅÛÇø´°ú Ư¼öÈ­µÈ ÇÔ¼ö, ±×¸®°í ÀÏ¹Ý ÇÔ¼ö°¡ µ¿½Ã¿¡ Á¸ÀçÇÒ °æ¿ì ¾î¶² ÇÔ¼ö¸¦ ¿ì¼±ÀûÀ¸·Î ¼±ÅÃÇÒ °ÍÀΰ¡´Â ÄÄÆÄÀÏ·¯¸¶´Ù ´Ù¸£´Ù. ¸¸¾à ÀÏ¹Ý ÇÔ¼ö°¡ ÅÛÇø´ ÇÔ¼öº¸´Ù ¿ì¼± ¼øÀ§°¡ ´Ê´Ù¸é ÁöÁ¤ÇÑ Å¸ÀÔ¿¡ ´ëÇØ Ư¼öÇÑ Ã³¸®¸¦ ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.

 

 AddTemp

ÀÓÀÇ Å¸ÀÔÀÇ µÎ Àμö a, b¸¦ ´õÇÑ °ªÀ» ¸®ÅÏÇÏ´Â Add ÇÔ¼ö ÅÛÇø´À» ÀÛ¼ºÇ쵂 char *¿¡ ´ëÇØ¼­´Â ¹®ÀÚ¿­À» ¿¬°áÇϵµ·Ï Ư¼öÈ­Ç϶ó.