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À¸·Î ÃʱâÈ ½ÃÄÑÁÖ´Â °ÍÀÔ´Ï´Ù.
ÀÌ»óÀ¸·Î °£´ÜÇϰԳª¸¶,, <Ʋ>ÀÇ °Á¸¦ ¸¶Ä¨´Ï´Ù.