Hitel¿¡ ÀÖ´ø °­Á Áß ÀϺÎÀÔ´Ï´Ù.

Á¦¸ñ :[°­ÁÂ] Template (Ʋ)

<1.Ʋ À̶õ?>=====================================================
 ¿ì¸®´Â C++ÀÌ ¶È°°Àº À̸§À»°¡Áø ÇÔ¼öµéÀÇ »ç¿ëÀ» Çã¿ëÇÑ´Ù°í ¾Ë°íÀÖ
À¾´Ï´Ù. Áï, Áߺ¹À» Çã¿ëÇÑ´Ù´Â  À̾߱âÁö¿ä. ±×·¯³ª, ¾Æ·¡ÀÇ ¿¹¸¦ º¾
½Ã´Ù.
 
   dad(int,int)       ;        ----------->(1)
   dad(double,double);  ----------->(2)
   dad(char,char);         ----------->(3)
 
 À§¿¡¼­ º¸¸é ¾Æ½Ã°ÚÁö¸¸,  ÀÎÀÚÇüµéÀÌ ¸ðµÎ ´Ù¸¨´Ï´Ù.  ¸¸ÀÏ , dad¶ó
´Â ÇÔ¼ö°¡ ÇÏ´ÂÀÏÀÌ À§ÀÇ  3°¡Áö ¸ðµÎ ±â¾ïÀå¼Ò¸¦ ÇØÁ¦ÇÏ´Â ±â´ÉÀ» ÇÑ
´Ù°í °¡Á¤ÇսôÙ.  Áï, (1), (2), (3) ¸ðµÎ ÇÏ´ÂÀÏÀº °°´Ù°í °¡Á¤ÇÏÀÚ
´Â ¸»ÀÔ´Ï´Ù. ±×·±µ¥, À§Ã³·³ ´ÜÁö, ÀÎÀÚÇüÀ» ±¸º°ÇÏ¿© ÀԷ¹ÞÀ» ÇÊ¿ä
¼ºÀÌ ÀÖÀ»¶§, ¼±¾ð°ú Á¤ÀǸ¦ À§Ã³·³ 3°¡Áö·Î °¢°¢ÇØÁÖ¾î¾ßÇÏ´Â ºÒÆíÀÌ
ÀÖÀ¾´Ï´Ù. ¾ó¸¶³ª ½Ã°£³¶ºñÀ̰í, ¿¡³ÊÁö ³¶ºñÀԴϱî? À̰ÍÀº ÁöÀû³ëµ¿
ÀÌ ¾Æ´Ï¶ó, ´Ü¼øÀ°Ã¼³ëµ¿À̶ó ÇÒ¼ö ÀÖÀ¾´Ï´Ù. ºÒÆíÇÏÁö¿ä?  À̶§ "Ʋ"
À» »ç¿ëÇÏ¸é µÇ´Â °ÍÀÔ´Ï´Ù. Áï, ÀÎÀÚÇüÀ» ÇϳªÀÇ º¯¼ö·Î Àâ°í »ç¿ëÇÏ
´Â °ÍÀÌÁö¿ä.. Áï,
 
   dad(F,F);
 
 À§Ã³·³ ÀÎÀÚÇüÀ»  À§ÇÑ º¯¼ö F¸¦ ÁöÁ¤Çسõ°í  F´ë½Å¿¡ int¸¦ ³ÖÀ¸¸é,
(1)ó·³ µÇ´Â °ÍÀ̰í,  F´ë½Å¿¡ double¸¦ ³ÖÀ¸¸é, (2)ó·³ µÇ´Â°ÍÀÌÁö
¿ä. ¿©±â¼­ F´Â ÀÎÀÚÇüÀ»  ´ã´Â ±×¸©ÀÓÀ» ¾Ë¼ö ÀÖÀ¾´Ï´Ù. ¾ó¸¶³ª °£Æí
ÇÏ°í Æí¸®ÇÑ ±â´ÉÀԴϱî? À̰ÍÀ» ¹Ù·Î template(Ʋ)À̶ó°í ÇÕ´Ï´Ù.

<2. ÇÔ¼öƲ>======================================================
 ÇÔ¼öƲÀº À§¿¡¼­ º¸ÀÎ ¿¹¿Í°°Àº  °æ¿ì¸¦ ¸»ÇÕ´Ï´Ù. Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
 
  template <ƲÀÎÀÚµé> Çü  ÇÔ¼öƲÀ̸§ (ÀÎÀÚµé) {ÇÔ¼öº»Ã¼}
 
  template    F     babo    (F x,F y) { .... }   // ¿¹(1)
 
  <ƲÀÎÀÚµé> :  ÀÎÀÚÇüÀ» ´ë½ÅÇÒ º¯¼öµé. ¿¹(1)¿¡¼­  º¸¸é ±× ºÎºÐ¿¡
                 °¡ µé¾î°¡ ÀÖÁö¿ä? ¿©±â¼­ class´Â ÀÏÁ¾ÀÇ
                ±âÈ£ÀÏ»Ó Å¬·¡½º¸¦ ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù. ´ÜÁö, ƲÀÎ
                ÀÚÀÓÀ» ³ªÅ¸³»´Â ±âÈ£ÀÔ´Ï´Ù.

   Çü        : ¸®ÅϰªÀÌ  ÀÖ´Â ÇÔ¼ö´Â ±×  ¸®ÅϰªÀÇ ÀÚ·áÇüÀ» ½áÁÖ¸é
               µË´Ï´Ù. ¿¹(1)¿¡¼­ F¸¦  ½áÁذÍÀº, F¶ó´Â ±×¸©¿¡ ´ã°Ü
               ÀÖ´Â ÀÚ·áÇüÀ»  ¸®ÅϰªÀ¸·Î ÇÑ´Ù´Â  À̾߱âÁö¿ä. ¿¹¸¦
               µé¾î F¶ó´Â ±×¸©¿¡  int°¡ µé¾îÀÖÀ¸¸é, intÇü °ªÀÌ ¸®
               ÅÏÀÌ µÈ´Ù´Â  À̾߱âÁö¿ä... ¸¸ÀÏ  ¸®ÅϰªÀÌ ¾øÀ»¶§´Â
                void¸¦ ½áÁÖ¸é µÇ°Ú½À´Ï´Ù.

  ÇÔ¼öƲÀ̸§ : ±×³É º¸Åë ÇÔ¼öÀ̸§Ã³·³ ¾Æ¹«À̸§À̳ª ºÙ¿©ÁÖ¸é µÊ.
  (ÀÎÀÚµé)   : ÀÎÀÚµéÀº ƲÀÎÀڵ鿡 Àִ°͵éÀ» ÀÚ·áÇüÀ¸·ÎÇÏ´Â ÀÎÀÚ
                   µéÀ» ¸»ÇÕ´Ï´Ù. (¿¹1)¿¡¼­´Â  FÇü ÀÎÀÚµéÀÌ ÀÖÁö¿ä? x¿Í y
                   ¸»ÀÔ´Ï´Ù.

  { .... }   : À̰ÍÀº FÇü ÀÎÀÚ¸¦ »ç¿ëÇÑ ÇÔ¼ö º»Ã¼·Î½á ÀÏ¹Ý ÇÔ¼ö¿¡
               ¼­ ó·³ ÀÛ¼ºÇÏ½Ã¸é µË´Ï´Ù.
 
 ´Ù½Ã <ƲÀÎÀÚµé>¿¡ ´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¾½Ã´Ù. ±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù.
    +-----------------------------------------------------+
    |  template                                                                       |
    |  F babo(F x,E y);             // ¿Ç°ÔµÈ °æ¿ì                          |
    |                                                                                     |
    |  template                                                                       |
    |  F babo(E x,E y);             // Ʋ¸°°æ¿ì (1)                         |    (¿¹2)
    +-----------------------------------------------------+
 1. ÇϳªÀÌ»óÀÇ Æ²ÀÎÀÚ¸¦ »ç¿ëÇÒ¼ö Àִµ¥, ±×µé»çÀÌÀÇ ±¸º°Àº ÇÔ¼ö¿¡
   ¼­ÀÇ ÀÎÀÚ¸®½ºÆ®µé°£ÀÇ ±¸º°¿¡¼­Ã³·³ ','À» »ç¿ëÇÑ´Ù.
 2. <ƲÀÎÀÚµé>¿¡ ¼±¾ðµÈ  Æ²ÀÎÀÚµéÀº ÃÖ¼ÒÇÑ ÇѹøÀÌ»óÀº ÇÔ¼öƲÀÇ ÀÎ
    ÀÚ¸®½ºÆ® Áß¿¡ ³ªÅ¸³ª¾ß ÇÑ´Ù.
 3. ¸ðµç ƲÀÎÀÚµé ¾Õ¿¡´Â class¶ó´Â ±âÈ£¸¦ ºÙ¿©¾ß ÇÑ´Ù.
 4. extern, static,  inline ¿Í°°Àº ¿¹¾à¾îµéÀº <ƲÀÎÀÚµé>´ÙÀ½¿¡ À§
    Ä¡ÇÑ´Ù.
 5. ƲÀº template°¡ ¼±¾ðµÈ°÷ºÎÅÍ ÇÔ¼ö³¡±îÁö¸¦ ¹üÀ§·Î °®´Â´Ù. µû¶ó
    ¼­ óÀ½¿¡ ¼³¸íÇÑ  (¿¹1)ó·³ ÇØµµ ÁÁ°í, (¿¹2)¿¡¼­Ã³·³ ¿©·¯ÁÙ·Î
    Çصµ ÁÁ´Ù. ÃëÇâ¿¡ ¸Â°Ô ¼±ÅÃÇØ¶ó.
 
 À§ ¿¹(2)¿¡¼­ (1)Àº ¿Ö  Æ²·ÈÀ»±î¿ä? ±ÔÄ¢ 2¹øÀ» ¸¸Á·ÇÏÁö ¸øÇ߱⠶§
¹®ÀÔ´Ï´Ù. Áï, F´Â ÀÎÀÚ¸®½ºÆ®Áß¿¡  ¾²ÀÌÁö ¾Ê°í ÀÖÁö¿ä? ±×·¡¼­ Ʋ¸°
°ÍÀÔ´Ï´Ù.
 ÀÌÁ¦ ±¸Ã¼ÀûÀÎ ¼Ò½º¸¦ ¿Ã·Áµå¸®ÁÒ..
 
 /******************************
      ÇÔ¼öƲÀ» À§ÇÑ ¼Ò½º
 ******************************/
 
 #include
 
 template
 F sub(F x,F y)
 {
     F z;                  // FÇüÀÌ ÇÔ¼ö³»ºÎ¿¡¼­ »ç¿ëµÈ ¿¹
     z=x+y;
     return z;
 }
 
 template F func(F x,E y) { return (x+y); }
                                            // ÇÑÁÙ·Î ¾´ ¿¹ (5)
 void main()
 {
     printf("%d\n",sub(3,4));                //(1)
     printf("%5.2f\n",sub(5.5,6.8));        //(2)
     printf("%d\n",func(4,5.4));            //(3)
     printf("%5.2f\n",func(3.3,7));         //(4)
}
 
/*************************************************************/
À§ ¼Ò½º¸¦ »ìÆìº¸Áö¿ä..
 Ã¹¹øÂ° ÇÔ¼öƲÀÎ sub()´Â  ¿©·¯ÁٷΠƲÀ» ¸¸µç°æ¿ìÀ̰í, µÎ¹øÂ° ÇÔ¼ö
ƲÀÎ func()´Â ÇÑÁٷΠƲÀ» ¸¸µç °æ¿ìÀÔ´Ï´Ù. ÃëÇâ¿¡ ¸Â´Â°ÍÀ» °¢ÀÚ°¡
¾Ë¾Æ¼­ °ñ¶ó¾²¼¼¿ä..
 sub()³»ºÎ¿¡ F·Î ¼±¾ðµÈ z°¡ ¾²À̰í ÀÖÀ¾´Ï´Ù. ¸¸ÀÏ, F¶ó´Â ±×¸©¼Ó¿¡
int°¡ µé¾î ÀÖ´Ù¸é, z´Â intÇüÀÌ µÇ´Â °Ì´Ï´Ù.
 func()ÇÔ¼ö¸¦ º¾½Ã´Ù. Á» Çì±ò¸®½ÃÁÒ? ¿©±â¼­ <ƲÀÎÀÚµé>À» µÎÁ¾·ù(F
¿Í E)·Î ¾´ÀÌÀ¯´Â ¼­·Î´Ù¸¥ÇüÀÇ ÀÎÀÚ¸¦ ¹Þ¾ÆµéÀϰæ¿ì¸¦ À§Çؼ­ »ç¿ëÇÑ
°ÍÀÔ´Ï´Ù. Áï, (3)°ú (4)¸¦ º¸¼¼¿ä. (3)Àº func(int,double)ÀÇ ÇüŸ¦
°¡Áö°í ÀÖÁö¿ä?  (4)´Â func(double,int)ÀÇ ÇüŸ¦  °¡Áö°í ÀÖ½À´Ï´Ù.
Áï, ¼­·Î´Ù¸¥ ÇüÀ» °¡Áö°í ÀÖ´Ù´Â À̾߱â ÀÔ´Ï´Ù. ±×¸®°í, func()Á¤ÀÇ
ºÎ¸¦ º¸¸é <ƲÀÎÀÚµé>´ÙÀ½¿¡ FÇüÀ» ÁöÁ¤Çϰí ÀÖÁö¿ä? Áï, funcÀ̸§ ¾Õ
¿¡ F¸»ÀÔ´Ï´Ù. À̰ÍÀº  °á°ú°ªÀÇ ÀÚ·áÇüÀ» ³ªÅ¸³À´Ï´Ù. À̰Ϳ¡ ´ëÇØ¼­
µû·Î ¼³¸í µå¸®°ÚÀ¾´Ï´Ù.
 ¿ì¼± ½ÇÇà½ÃÄÑ º¸¼¼¿ä..
 
 ------ ÄÄÆÄÀÏ·¯°¡ ÀÚ·áÇüÀ» ±¸º°ÇÏ´Â ¹ý -------
 À§¿¡¼­ º¸¿©µå¸° ¼Ò½ºÁß func(F x,E y)¸¦ ¿¹·Î µéÁö¿ä..

 ¸¸ÀÏ func()¸¦ »ç¿ëÇÒ¶§ func(3,3)À̶ó°í Çϸé À̰ÍÀº func(int,int)
ÀÇ  ÇüŸ¦  ÇÏ°í  ÀÖÁö¿ä?  ±×¸®°í,  func(2.2,4)¶ó°í  ÇÏ¸é  À̰ÍÀº
func(double,int)ÀÇ ÇüŸ¦ Çϰí ÀÖ½À´Ï´Ù.

ù¹øÂ°ÀÇ °æ¿ì F¿Í E¿¡ ¸ðµÎ int°¡ µé¾î°©´Ï´Ù.
µÎ¹øÂ°ÀÇ °æ¿ì F¿¡´Â double°¡, E¿¡´Â int°¡ µé¾î°©´Ï´Ù.
±×·³, ¾î¶»°ÔÇØ¼­ ÀÌ·¸°Ô µé¾î°¥¼ö ÀÖÀ»±î¿ä?

 ÄÄÆÄÀÏ·¯´Â ¿ì¼± func(2.2,4)À»  ºÐ¼®À» ÇÕ´Ï´Ù. ¿©±â¼­ ù¹øÂ° ÀÎÀÚ
ÀÇ ³»¿ëÀ» »ìÆìº¸°í,  doubleÇüÀÓÀ» ¾Ë¾Æ³½ÈÄ func(F,E)·Î °¡¼­ F´ë½Å
¿¡ double¸¦ ³Ö½À´Ï´Ù. ´Ù½Ã func(2.2,4)¸¦ ºÐ¼®ÇÏ¿© µÎ¹øÂ° ÀÎÀÚÀÎ 4
°¡ intÇüÀÓÀ»  ¾Ë¾Æ³»°í, func(F,E)·Î °¡¼­  E´ë½Å¿¡ int¸¦ ³Ö½À´Ï´Ù.
±×·¡¼­ ±× °úÁ¤ÀÌ ³¡³­ÈÄ¿¡´Â F´Â  double·Î , E´Â int·Î Ãë±ÞÀÌ µÇ´Â
°Ì´Ï´Ù.

Á¤¸®¸¦  Çϸé, ÄÄÆÄÀÏ·¯´Â ¾î¶°ÇÑ  ÇÔ¼ö°¡ ±¸Ã¼ÀûÀ¸·Î »ç¿ëµÈ
ÁöÁ¡¿¡¼­ °¡Áö°íÀÖ´Â Çü½ÄÀÎÀÚÀÇ  ÀÚ·áÇüÀ» ÀÚüÀûÀ¸·Î °Ë»çÇÑÈÄ °Ë»ç
ÇÑ °á°ú¸¦  ÇÔ¼öÀÇ Á¤ÀǺο¡¿Í¼­  ±× ÀÎÀںκп¡  °¢°¢ ³Ö´Â °ÍÀÔ´Ï´Ù.

Áï, func(F,E)¶ó°í ÇßÀ»¶§ ÄÄÆÄÀÏ·¯´Â ¾ÆÁ÷ func(F,E)¿¡¼­ F¿Í E°¡ ¾î
¶² ÀÚ·áÇüÀ» °¡ÁúÁö  ¸ð¸£°í ÀÖÀ¸¸ç, ±× func()°¡ ±¸Ã¼ÀûÀ¸·Î »ç¿ëµÉ ¶§
¾²¿©Áø ÀÎÀÚ¸¦ °Ë»çÇØ¼­ ±× °á°ú¸¦ ¾Ë¾Æ³»´Â °ÍÀÌÁÒ. À§ ¼Ò½ºÀÇ func()
¸¦ º¸¸é, (3)¿¡¼­ F ´Â int°¡  µÇ¸ç, E´Â double°¡ µË´Ï´Ù.  

¾Æ±î <ƲÀÎÀÚµé>µÚ¿¡ F°¡ ºÙÀº ÀÌÀ¯¸¦  ¼³¸íÇÏ´Ù ¸»¾ÒÁö¿ä?
°á°ú°ªÀÌ FÇüÀ̶ó´Â À̾߱⠸»ÀÔ´Ï´Ù.
(3)¿¡¼­ ºñ·Î¼Ò F°¡ intÇüÀ̶ó´Â °ÍÀ» ¾Ë°í´Â °á°ú°ª
À» F´ë½Å¿¡ int·Î  ÀνÄÀ» ÇÏ´Â °ÍÀÔ´Ï´Ù. ½ÇÇàÇØº¸½Ã¸é, ¾Æ½Ã°ÚÁö¸¸,
°á°ú°¡ doubleÇüÀÌ ³ª¿Í¾ß Á¤»ó(double  + int == double) ÀÌÁö¸¸, °á
°úÇüÀÌ intÇüÀ̹ǷΠintÇüÀ¸·Î º¯È¯µÈ »óŰ¡ Ãâ·ÂÀÌ µË´Ï´Ù.

ÀϹÝÀûÀ¸·Î ÇÔ¼öƲÀ» »ç¿ëÇÏ°Ô  µÇ¸é, À§¿Í°°Àº°æ¿ì F´ë½Å¿¡ int°¡ µé
¾î°£´Ù´Â°ÍÀ» ÄÄÆÄÀÏ·¯°¡  ¾Ë°ÔµÇ¸é, ÄÄÆÄÀÏ·¯´Â  ÀÚüÀûÀ¸·Î F´ë½Å¿¡
int°¡ ¾²ÀÎ ÇÔ¼ö¸¦ ¸¸µì´Ï´Ù.  ±×·¡¼­ ¿ì¸®°¡ ¿©·¯ °³ÀÇ ÇÔ¼ö¸¦ ¸¸µé°Í
À» ÄÄÆÄÀÏ·¯°¡ ´ë½Å ¸¸µé¾îÁֹǷΠ¿ì¸®ÀÇ ¼ö°í¸¦ ´ú¾îÁÙ ¼ö ÀÖ´Â °ÍÀÌÁö
¿ä.
 
ÇÑÆí ÇÔ¼öƲµµ Áߺ¹ÀÌ °¡´ÉÇѵ¥.. ´ÙÀ½¿¹¿Í °°½À´Ï´Ù.
 
 template F babo(F,F);
 template F babo(F,F,F,char);
 
¸¸ÀÏ ,ÇÔ¼öƲ³¢¸® Áߺ¹ÇÏ´Â °ÍÀÌ  ¾Æ´Ï¶ó, ÀϹÝÇÔ¼ö¿Í Áߺ¹ÇÒ °æ¿ì´Â ±×
ÀϹÝÇÔ¼ö´Â °°ÀºÈ­ÀÏ¿¡ Á¸ÀçÇØ¾ß ÇÑ´Ù.
 
¶Ç ÇÑÆí, ´ÙÀ½ ¿¹¸¦ º¾½Ã´Ù.
 
 template F babo(F x,F y) { ... }   // Á¤ÀÇ
 babo(1,4.6);       // ¿À·ù (1)
 
À§¿Í °°ÀÌ ÇßÀ» °æ¿ì ¿À·ù°¡  ¹ß»ýÇÕ´Ï´Ù. ¿Ö³Ä¸é, babo()¿¡ ´ëÀÔÇÒ µÎ
ÀÎÀÚÇüÀÌ °°¾Æ¾ß ÇÕ´Ï´Ù. Á¤ÀǺκп¡¼­ babo()ÇÔ¼ö¸¦ º¸¼¼¿ä.   2°³ÀÇ
ÀÎÀÚ ¸ðµÎ FÇüÀÓÀ» ¾Ë¼ö ÀÖ½À´Ï´Ù.

F¿¡ ÀúÀåµÈ ÀÚ·áÇüÀÌ intÇüÀ̾ú´Ù¸é, 2°³ÀÇ ÀÎÀÚÀÇ ÀÚ·áÇüÀº ¸ðµÎ intÇüÀÌ
µÇ´Â °ÍÀÔ´Ï´Ù.   (1)°ú °°Àº°æ¿ì´Â ÀÎÀÚÇüÀÌ Çϳª´Â intÇüÀÌ°í ´Ù¸¥Çϳª´Â
double À̹ǷÎ, ¿À·ù°¡ ¹ß»ýÇÑ´Ù´Â À̾߱âÀÔ´Ï´Ù.  
À̶§ À̸¦ ÇØ°áÇϱâ À§Çؼ­, ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.
 
 template F babo(F x,F y) { ... }   //Ʋ Á¤ÀÇ
 double babo(double,double);     // ƲÀ» È®Àå
 babo(1,4.6);                    // Á¤»ó
 babo(2,2);                       // Á¤»ó
 babo(2.3,4.1);                  // Á¤»ó
 
À§¿¡¼­ º¸µíÀÌ Æ²À» È®ÀåÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Áï, babo¿¡ ¾²ÀÏ µÎ°³
ÀÇ ÀÎÀÚÇüÀÌ ¼­·Î ´Ù¸¦¼ö Àִٴ°ÍÀÌ ¿¹»óµÈ´Ù¸é, À§¿Í°°ÀÌ ´Ù½ÃÇѹø,
È®ÀåÀ» ÇØÁÖ´Â °ÍÀÔ´Ï´Ù. À§ÀÇ ¿¹´Â ´ÙÀ½°ú  °°ÀÌ ÇØµµ °á°ú´Â °°½À´Ï´Ù.
 
 template F babo(F x,F y) { ... }  //  Æ² Á¤ÀÇ
 int babo(int,int);        // ƲȮÀå
 
"±×·³, ¿Ö ¾Æ±î ¼Ò½º¿¡¼­ÀÇ  (5)ó·³ ÇÏÁö¾Ê°í ±¸Å׿© ÀÌó·³ ÇÏ³Ä ÀÓ
¸¶!" ¶ó°í ÇÏ´Â ºÐÀº ±×·¡µµ ¿­½ÉÈ÷ ÇÏ´Â ºÐÀÔ´Ï´Ù. ´äÀº ÀÌ·¸½À´Ï´Ù.
¹æ±Ý ¼³¸íÇѰÍó·³Çϸé ÇÔ¼ö¸¦  ¼öÇàÇÑÈÄ °á°ú°ªÀ» ¸®ÅÏÇÒ¶§ À¯¿¬¼ºÀÌ
ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.

 Áï, intÇü °á°ú°¡ ³ª¿ÔÀ¸¸é, intÇüÀ¸·Î ¸®ÅÏÀ̵ǰí,
doubleÇüÀÇ °á°ú°¡  ³ª¿ÔÀ¸¸é, doubleÇüÀ¸·Î ¸®ÅÏÀÌ  µË´Ï´Ù. ±×·¯³ª,
À§ ¼Ò½ºÀÇ (5)ó·³ ÇßÀ»°æ¿ì FÀÇ °ª¿¡´ëÇØ¼­¸¸ ¸®ÅÏÀÌ µÇ¹Ç·Î, °ª¿¡´ë
ÇÑ »ó´çÇÑ ¿ÀÂ÷°¡ ÀÖÀ»¼ö ÀÖÀ¾´Ï´Ù. Áï, ¸¸ÀÏ °á°ú´Â doubleÇüÀε¥, F
°¡ intÇü À̾ú´Ù¸é, ¼Ò¼öÁ¡ ÀÌÇÏ ºÎºÐÀº Àß·Á³ª°¡°í, ¼Ò¼öÁ¡ ÀÌ»óºÎºÐ
¸¸ÀÌ ¸®ÅÏÀÌ µÇ´Â °ÍÀÌÁö¿ä.. ÀÌ·± °æ¿ì »ó´çÇÑ À§Ç輺ÀÌ µµ»ç¸®°í ÀÖ
±â ¶§¹®¿¡,, ¹æ±Ý¼³¸íÇÑ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁÀ»µí ½Í½À´Ï´Ù.
 

<3. Ŭ·¡½º Ʋ> ==================================================
 ÇÔ¼öƲÀÇ °æ¿ì¿Í  °ÅÀÇ °°Áö¸¸, ¸î°¡Áö  ÁÖÀÇÇØ¾ßÇÒ »çÇ×°ú Â÷ÀÌÁ¡ÀÌ
Á¸ÀçÇÕ´Ï´Ù. ¿ì¼± Ŭ·¡½ºÆ²À» ¸¸µé±â À§ÇÑ Çü½ÄÀ» ¾Ë¾Æº¾½Ã´Ù.
 +------------------------------------------------+
 |  template<ƲÀÎÀÚµé>                                             |
 |  class Ŭ·¡½ºÆ²¸í {                                               |
 |       ....                                                                  |
 |  };                                                                        |
 |                                                                             |
 +------------------------------------------------+
 |  template                                                               |
 |  class tong {                                                          |
 |        F x;                                                                |
 |  public:                                                                  |
 |        tong(int p=0) { x=p; }                                      |
 |        F sub(F i,F j) { x=i+j; return x; }                       |
 |        F func(F m,int n) { return m+n; }                      |
 |        F tmp() { return x; };  // (1)                             |  (¿¹3)
 |  };                                                                        |
 +------------------------------------------------+
  À§ ¿¹¸¦ º¸¸é »ó´çÈ÷  ÀÌÇØÇϱ⠽¬¿ï°Ì´Ï´Ù. °ÅÀÇ ÀÏ¹Ý Å¬·¡½º¿Í ºñ
½ÁÇÏÁö¿ä? ´ÜÁö, ¸ÇÀ§¿¡ template(class F>ÀÌ ¾²¿´´Ù´Â°Í°ú ¿©±â¼­ Áö
Á¤ÇÑ  Æ²ÀÎÀÚ F¸¦ »ç¿ëÇØ¼­ ¸â¹ö¿Í ¸â¹öÇÔ¼ö¸¦ ±¸¼ºÇߴٴ°͸¸ Ʋ¸®Áö
¿ä..

  ¿©±â¼­ À¯³äÇØ¾ßÇÒ°ÍÀº  (1)ÀÔ´Ï´Ù. Áï, ÇÔ¼öƲó·³  »ç¿ëµÇ°í ÀÖÁö
¸¸, ÇÔ¼öƲ¿¡¼­ÀÇ ±ÔÄ¢Çϳª¸¦ ¾î±â°í ÀÖÀ½À» ¾Ë¼ö ÀÖÀ¾´Ï´Ù. Áï, ÁöÁ¤
µÈ F°¡ ÇÔ¼öƲ ÀÎÀÚ¸®½ºÆ®¿¡  Çѹøµµ »ç¿ëµÇÁö ¾Ê¾Ò´Ù´Â °Ì´Ï´Ù. À̰Í
Àº ÇÔ¼öƲ ±ÔÄ¢2¹ø¿¡  À§¹èµÇ´Â °ÍÀÓ´Ï´Ù. ±×·³¿¡µµ ºÒ±¸Çϰí, ¿¡·¯´Â
Çϳªµµ ³ªÁö ¾Ê½À´Ï´Ù. À̰ÍÀÌ ÀÏ¹Ý ÇÔ¼öƲ°ú Ŭ·¡½ºÆ²¿¡ »ç¿ëµÈ ¸â¹ö
ÇÔ¼öƲ°úÀÇ Â÷ÀÌÁ¡ÀÔ´Ï´Ù. Áï, ÀÎÀڷνá Çѹøµµ »ç¿ë¾ÊµÇµµ »ó°ü ¾ø´Ù
´Â À̾߱âÁö¿ä.

 À§¿¡¼­ º¸¿©µå¸° 'Çü½Ä'À» º¾½Ã´Ù.
 <ƲÀÎÀÚµé> : ÇÔ¼öƲ¿¡¼­ÀÇ <ƲÀÎÀÚµé>°ú Àǹ̴ °°´Ù. ÇÏÁö¸¸, ÇÔ¼ö
              Æ²Àΰæ¿ì´Â ¹ÝµíÀÌ  class¸¦ ¾Õ¿¡  ºÎ¿©ÁÖ¾î¾ß ÇÏÁö¸¸, 
              ¿©±â¼­´Â class¿Ü¿¡ int, double¿Í °°Àº ÀÏ¹Ý ÀÚ·áÇüÀ»
              »ç¿ëÇÑ Æ²ÀÎÀÚµéÀ» ³Ö¾îÁÙ¼öµµ  ÀÖ´Ù. ¸¸ÀÏ int·Î ƲÀÎ
              ÀÚ¸¦ ¼±¾ðÇß´Ù¸é, class±âÈ£¸¦  »ç¿ëÇÑ º¯¼öó·³ "ÀÎÀÚ
              ÇüÀ» ´ã´Â ±×¸©"ÀÌ µÇ´Â°ÍÀÌ ¾Æ´Ï¶ó, "°ªÀ» ´ã´Â ±×¸©"
              ÀÌ µÈ´Ù.

 class      : Ŭ·¡½ºÀÓÀ» ¾Ë¸®´Â ¿¹¾à¾î·Î½á ÀϹÝÀûÀÎ ÀǹÌÀ̸ç, <Ʋ
              ÀÎÀÚµé>¿¡ ¾²ÀÌ´Â class±âÈ£¿Í´Â ¼º°ÝÀÌ ´Ù¸§

 Å¬·¡½ºÆ²¸í : ÀϹÝÀûÀΠŬ·¡½ºÃ³·³ ¾Æ¹«À̸§À̳ª ºÙ¿©µµ ÁÁ´Ù.

 

 -------- Ŭ·¡½ºÆ²ÀÇ ±¸Ã¼ÀûÀÎ º¯È¯ --------

 ÇÔ¼öƲ°ú´Â ¿ÏÀüÈ÷ ´Ù¸¥ ¹æ½ÄÀÔ´Ï´Ù. ÇÔ¼öƲÀΰæ¿ì ÄÄÆÄÀÏ·¯°¡ ±× ÇÔ
¼ö°¡ ¾²Àΰ÷ÀÇ ÀÎÀÚµéÀ» ÀÚüÀûÀ¸·Î ºÐ¼®ÇÏ¿© <ƲÀÎÀÚµé>´ë½Å¿¡ ±× °Ë
»ç°á°ú¸¦ ³Ö¾îÁÖÁö¸¸, Ŭ·¡½ºÆ²ÀÎ °æ¿ì´Â ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ ±× ÀÚ·áÇü
À» ½áÁÖ¾î¾ß  ÇÕ´Ï´Ù. ¿Ö³Ä¸é, ÇÔ¼öƲÀΰæ¿ì´Â  °Å±â¿¡ ¾²ÀÎ 'ÀÎÀÚ'¸¦
°Ë»çÇÏ¿© ±¸º°ÇÒ¼ö ÀÖÁö¸¸,  Å¬·¡½ºÀΰæ¿ì´Â °Ë»çÇÒ 'ÀÎÀÚ'°¡ ¾ø±â ¶§
¹®ÀÔ´Ï´Ù. µû¶ó¼­, (¿¹3)À» ¿¹·Î µéÀÚ¸é,,,, ±× Ŭ·¡½º¸¦ »ç¿ëÇÒ¶§ ´Ù
À½Ã³·³ ÇØ¾ß ÇÕ´Ï´Ù.
 
  tong x;        // <ƲÀÎÀÚ>¸¦ intÇüÀ¸·ÎÇϰí, º¯¼ö x¸¦ ¼±¾ð
  tong y;     // <ƲÀÎÀÚ>¸¦ doubleÇüÀ¸·Î ÇÔ.
  x.sub(3,3);         // intÇüÀ¸·Î º¯È¯µÈ Ŭ·¡½º·Î sub()¸¦ ÂüÁ¶
 
Áï, <  > ¿¡´Ù°¡ ÇÁ·Î±×·¡¸Ó°¡ ¿øÇÏ´Â  ÀÚ·áÇüÀ» ³Ö¾î¼­ ÄÄÆÄÀÏ·¯¿¡°Ô
¾Ë·ÁÁÖ´Â °ÍÀÔ´Ï´Ù.
 ÀÌÁ¦±îÁö ¼³¸íÇÑ ³»¿ëµéÀ» Á¤¸®ÇÑ´Ù´Â Àǹ̿¡¼­ ¼Ò½º¸¦ ¿Ã·Áµå¸®ÁÒ..
 
 /******************************
    Å¬·¡½ºÆ²À» À§ÇÑ ¼Ò½º
 *******************************/
 
 #include
 #include
 
 template
 class tong {
       F x;
       public:
           tong(int p=0) { x=p; }         //ÃʱâÈ­
           F sub(F i,F j) { x=i+j; return x; }  // FÇü ÇÔ¼ö
           F func(F m,int n) { return m

+n; }  // ÀÎÀÚÇüÀÌ Æ²¸°°Í
           F tmp() { return x; }  // (1)   // ÀÎÀÚ°¡ ¾ø´Â°Í
 };
 
 template     // °ªÀÌ ´ëÀԵǴ Ŭ·¡½ºÆ²
 class lupin2 {
       public:
       int x;
       T  sub() {
          x=F;             // F°ªÀÌ x¿¡ ´ëÀԵȴÙ.
          return x;
          }
 };
 
 void  main()
 {
   clrscr();
   tong x;        // <ƲÀÎÀÚ>¸¦ intÇüÀ¸·ÎÇϰí, º¯¼ö x¸¦ ¼±¾ð
   tong y;     // <ƲÀÎÀÚ>¸¦ doubleÇüÀ¸·Î ÇÔ.
   lupin2 z;
   printf("%d\n",x.sub(3,3)); // intÇüÀ¸·Î º¯È¯µÈx·Î sub()¸¦ ÂüÁ¶
   printf("%4.2f\n",y.func(3.5,1));
   printf("%d %3.1f\n",x.tmp(),y.tmp());
   printf("%d\n",z.sub());
 }
 
/***************************************************************/
 ¼³¸íÀº ÇÊ¿ä¾øÀ»°Í °°³×¿ä.. ÀÌÁ¦±îÁö ÀÔÀÌ ´âµµ·Ï ÇØµå·ÈÀ¸´Ï±î..

 ÇÑÆí, Ŭ·¡½ºÆ²¿¡¼­µµ static¸â¹ö¿Í  staticÇÔ¼ö°¡ ÀÖÀ»¼ö ÀÖÀ¾´Ï´Ù.
Çü½ÄÀº ÀÏ¹Ý Å¬·¡½º¿Í ºñ½ÁÇÕ´Ï´Ù. satatic¸â¹öÀÇ °æ¿ì ÀÏ¹Ý ¸â¹ö¿¡¼­
´Â Ŭ·¡½º ¹Û¿¡¼­ µû·Î Á¤ÀǸ¦ ÇØ ÁÖ¾úÁö¿ä? Ŭ·¡½ºÆ²¿¡¼­µµ ¸¶Âù°¡Áö
ÀÔ´Ï´Ù. ´ÙÀ½ÀÌ ¿¹ÀÔ´Ï´Ù.
 
  template
  class tong {
        static int x;
  };
  template int tong::x=0;
 
Áï, staticº¯¼ö x¸¦ 0À¸·Î ÃʱâÈ­ ½ÃÄÑÁÖ´Â °ÍÀÔ´Ï´Ù.
 
ÀÌ»óÀ¸·Î °£´ÜÇϰԳª¸¶,, <Ʋ>ÀÇ  °­Á¸¦ ¸¶Ä¨´Ï´Ù.