Ŭ·¡½º ÅÛÇø´Àº ÇÔ¼ö ÅÛÇø´°ú ºñ½ÁÇ쵂 Âï¾î³»´Â ´ë»óÀÌ Å¬·¡½º¶ó´Â °Í¸¸ ´Ù¸£´Ù. ±¸Á¶³ª ±¸Çö ¾Ë°í¸®ÁòÀº µ¿ÀÏÇ쵂 ¸â¹öµéÀÇ Å¸ÀÔ¸¸ ´Ù¸¦ °æ¿ì Ŭ·¡½º¸¦ ÀÏÀÏÀÌ µû·Î ¸¸µå´Â ´ë½Å ÅÛÇø´À» Á¤ÀÇÇÑ ÈÄ ÅÛÇø´À¸·ÎºÎÅÍ Å¬·¡½º¸¦ ¸¸µé ¼ö ÀÖ´Ù. ½Ç¿ëÀû °¡Ä¡´Â º°·Î ¾øÁö¸¸ ȸé»óÀÇ Æ¯Á¤ ÁÂÇ¥¿¡ Ãâ·ÂµÉ °ª¿¡ ´ëÇÑ Á¤º¸¸¦ Ç¥ÇöÇϴ Ŭ·¡½º¸¦ ¸¸µé¾î º¸ÀÚ. Á¤º¸ÀÇ Å¸ÀÔ¿¡ µû¶ó °ªÀ» Ç¥ÇöÇÏ´Â ¸â¹öÀÇ Å¸ÀÔÀÌ ´Þ¶óÁö¹Ç·Î ŸÀÔ¿¡ µû¶ó Ŭ·¡½º¸¦ ÀÏÀÏÀÌ ¸¸µé¾î¾ß ÇÑ´Ù.
class PosValueInt
{
private:
int x,y;
int value;
public:
PosValue(int ax, int ay, int av) : x(ax),y(ay),value(av) { }
void OutValue();
};
class PosValueChar
{
private:
int x,y;
char value;
public:
PosValue(int ax, int ay, char av) : x(ax),y(ay),value(av) { }
void OutValue();
};
class PosValueDouble
{
private:
int x,y;
double value;
public:
PosValue(int ax, int ay, double av) : x(ax),y(ay),value(av) { }
void OutValue();
};
ÁÂÇ¥°ª x, y´Â ¸ðµç Ŭ·¡½º¿¡¼ intÇüÀÌ¸ç °ªÀ» Ç¥ÇöÇÏ´Â value ¸â¹öÀÇ Å¸ÀÔ¸¸ ´Þ¶óÁø´Ù. Ŭ·¡½º´Â ÇÔ¼ö¿¡¼¿Í °°Àº ¿À¹ö·ÎµùÀÌ Áö¿øµÇÁö ¾ÊÀ¸¹Ç·Î À̸§À» ¸ðµÎ ´Ù¸£°Ô ÀÛ¼ºÇØ¾ß Çϸç valueÀÇ Å¸ÀÔ¿¡ µû¶ó »ý¼ºÀÚÀÇ ¿øÇüµµ °¢±â ´Ù¸£´Ù. °á±¹ ½ÇÁ¦·Î ´Ù¸¥ ºÎºÐÀº valueÀÇ Å¸ÀÔ»ÓÀÌ¸ç ³ª¸ÓÁö´Â ¸ðµÎ µ¿ÀÏÇϹǷΠÀÌ Å¬·¡½ºµéÀ» ÇϳªÀÇ ÅÛÇø´À¸·Î ÅëÇÕÇÒ ¼ö ÀÖ´Ù.
|
¿¹ Á¦ : PosValueTemp |
#include <Turboc.h>
#include <iostream>
using namespace std;
template <typename T>
class PosValue
{
private:
int x,y;
T value;
public:
PosValue(int ax, int ay, T av) : x(ax),y(ay),value(av) { }
void OutValue();
};
template <typename T>
void PosValue<T>::OutValue()
{
gotoxy(x,y);
cout << value << endl;
}
void main()
{
PosValue<int> iv(1,1,2);
PosValue<char> cv(5,1,'C');
PosValue<double> dv(30,2,3.14);
iv.OutValue();
cv.OutValue();
dv.OutValue();
}
Ŭ·¡½º ¼±¾ð¹®¾Õ¿¡ template <typename T>¸¦ ºÙÀ̰í ŸÀÔ¿¡ Á¾¼ÓÀûÀÎ ºÎºÐ¿¡¸¸ T¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹Á¦ÀÇ PosValue Ŭ·¡½º´Â ÅÛÇø´ Àμö·Î Àü´Þ¹ÞÀº ŸÀÔ T¸¦ valueÀÇ Å¸ÀÔÀ¸·Î ¼±¾ðÇÏ¿´°í »ý¼ºÀÚÀÇ ¼¼ ¹øÂ° Àμöµµ TÇüÀÌ µÈ´Ù. ÀÌ·¸°Ô Á¤ÀÇµÈ Å¬·¡½º ŸÀÔÀÇ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ Ŭ·¡½º À̸§ ´ÙÀ½ÀÇ < > °ýÈ£¾È¿¡ ¿øÇϴ ŸÀÔÀ» ¹àÇô¾ß ÇÑ´Ù. Ŭ·¡½º ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁö´Â Ŭ·¡½º¸¦ ÅÛÇø´ Ŭ·¡½º¶ó°í Çϴµ¥ ÅÛÇø´ Ŭ·¡½ºÀÇ Å¸ÀÔ¸í¿¡´Â < > °ýÈ£°¡ Ç×»ó µû¶ó ´Ù´Ñ´Ù. value°¡ intÇüÀΠŬ·¡½ºÀÇ À̸§Àº PosValue<int>À̰í value°¡ charÇüÀΠŬ·¡½ºÀÇ À̸§Àº PosValue<char>ÀÌ´Ù.
´Ü ¿¹¿ÜÀûÀ¸·Î »ý¼ºÀÚÀÇ À̸§Àº Ŭ·¡½ºÀÇ À̸§À» µû¶ó°¡Áö¸¸ Ŭ·¡½º ÅÛÇø´ÀÇ °æ¿ì ÅÛÇø´ À̸§À» »ç¿ëÇØµµ »ó°ü¾ø´Ù. <T> °ýÈ£°¡ Àְųª ¾ø°Å³ª »ó°ü¾ø´Ù´Â ¾ê±âÀε¥ À§ ¿¹Á¦ÀÇ PosValue »ý¼ºÀÚ¸¦ PosValue<T>(int ax, int ay, T av)·Î Á¤ÀÇÇÒ ¼öµµ ÀÖ´Ù. º¸ÅëÀº »ý¼ºÀÚ¿¡ ´ëÇØ¼´Â <T>¸¦ ºÙÀÌÁö ¾Ê´Â´Ù.

Ŭ·¡½º ÅÛÇø´ÀÇ ¸â¹ö ÇÔ¼ö¸¦ ¼±¾ð¹® ¿ÜºÎ¿¡¼ ÀÛ¼ºÇÒ ¶§´Â ÅÛÇø´¿¡ ¼ÓÇÑ ¸â¹ö ÇÔ¼öÀÓÀ» ¹àÈ÷±â À§ÇØ ¼Ò¼Ó Ŭ·¡½ºÀÇ À̸§¿¡µµ <T>¸¦ ºÙ¿©¾ß Çϸç T°¡ ÅÛÇø´ ÀμöÀÓÀ» ¸í½ÃÇϱâ À§ÇØ template <typename T>°¡ ¸ÕÀú ¿Í¾ß ÇÑ´Ù. OutValue ¸â¹ö ÇÔ¼ö´Â PosValue<T> Ŭ·¡½º ¼Ò¼ÓÀ̸ç À̶§ T´Â ÅÛÇø´ Àμö ¸ñ·ÏÀ¸·Î Àü´ÞµÈ ŸÀÔÀÇ À̸§ÀÌ´Ù. ÇÔ¼ö º»Ã¼ ³»¿¡¼´Â T¸¦ ¾ðÁ¦µçÁö ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. Ŭ·¡½º ¼±¾ð¹® ³»ºÎ¿¡¼ ÀζóÀÎÀ¸·Î ÇÔ¼ö¸¦ ¼±¾ðÇÒ ¶§´Â Ŭ·¡½º ¼±¾ð¹®¾Õ¿¡ T¿¡ ´ëÇÑ ¼³¸íÀÌ ÀÖÀ¸¹Ç·Î ÀÌ·¸°Ô ÇÏÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù.
template <typename T>
class PosValue
{
....
void OutValue() {
gotoxy(x,y);
cout << value << endl;
}
};
ÅÛÇø´ Ŭ·¡½º·ÎºÎÅÍ °´Ã¼¸¦ ¼±¾ðÇÒ ¶§´Â ÅÛÇø´ À̸§ ´ÙÀ½¿¡ < >°ýÈ£¸¦ ¾²°í °ýÈ£¾È¿¡ T·Î Àü´ÞµÉ ŸÀÔÀÇ À̸§À» ¸í½ÃÇØ¾ß ÇÑ´Ù. PosValue<int>´Â intŸÀÔÀÇ value¸¦ ¸â¹ö·Î °¡Áö´Â PosValue ÅÛÇø´ Ŭ·¡½º¸¦ ÀǹÌÇϸç PosValue<double> Ŭ·¡½ºÀÇ value´Â double ŸÀÔÀÌ µÈ´Ù. ÅÛÇø´ Ŭ·¡½ºÀÇ À̸§¿¡´Â ŸÀÔÀÌ ºÐ¸íÈ÷ ¸í½ÃµÇ¾î¾ß ÇÑ´Ù. PosValue¶ó´Â ¸íĪÀº ¾îµð±îÁö³ª ÅÛÇø´ÀÇ À̸§ÀÏ »ÓÀ̹ǷΠÀÌ À̸§À¸·ÎºÎÅÍ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö´Â ¾ø´Ù.
ÄÄÆÄÀÏ·¯´Â °´Ã¼ ¼±¾ð¹®¿¡ ÀÖ´Â ÃʱⰪÀÇ Å¸ÀÔÀ¸·ÎºÎÅÍ ¾î¶² ŸÀÔ¿¡ ´ëÇÑ Å¬·¡½º¸¦ ¿øÇÏ´ÂÁö ¾Ë ¼ö ÀÖÀ» °Íµµ °°´Ù. ¿¹¸¦ µé¾î PosValue iv(1,1,2)¶ó°í ¾²¸é Á¦ÀÏ ¸¶Áö¸· Àμö°¡ intÇü »ó¼öÀ̹ǷΠPosValue<int> ŸÀÔÀ̶ó°í À¯Ãß °¡´ÉÇÒ °ÍÀÌ´Ù. ±×·¯³ª »ý¼ºÀÚ°¡ ¿À¹ö·ÎµùµÇ¾î ÀÖÀ» °æ¿ì ÀÌ Á¤º¸¸¸À¸·Î´Â ¿øÇϴ ŸÀÔÀ» Á¤È®ÇÏ°Ô ÆÇ´ÜÇÏ±â ¾î·Æ´Ù. ¶ÇÇÑ »ý¼ºÀÚ¸¦ È£ÃâÇϱâ Àü¿¡ °´Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ¾ß Çϴµ¥ ÀÌ ½ÃÁ¡¿¡¼ »ý¼ºÇÒ °´Ã¼ÀÇ Å©±â¸¦ ¸ÕÀú °è»êÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠŬ·¡½º À̸§¿¡ ŸÀÔÀÌ ¸í½ÃµÇ¾î¾ß ÇÑ´Ù.
ÇÔ¼ö¿¡¼¿Í ¸¶Âù°¡Áö·Î Ŭ·¡½º ÅÛÇø´µµ ´Ü¼øÇÑ ¼±¾ð¿¡ ºÒ°úÇϸç ÄÄÆÄÀÏ·¯´Â ÀÌ ÅÛÇø´ÀÇ ¸ð¾çÀ» ±â¾ïÇØ µÎ¾ú´Ù°¡ °´Ã¼°¡ »ý¼ºµÉ ¶§ Àü´ÞµÈ ŸÀÔ¿¡ ¸Â´Â Ŭ·¡½º Á¤ÀǸ¦ ±¸Ã¼ÈÇÑ´Ù. ¸¸¾à Ŭ·¡½º ÅÛÇø´ ¼±¾ð¸¸ ÀÖ°í °´Ã¼¸¦ »ý¼ºÇÏÁö ¾Ê´Â´Ù¸é ÅÛÇø´Àº ¹«½ÃµÈ´Ù. main¿¡¼ int, char, double ŸÀÔÀÇ PosValue °´Ã¼¸¦ °¢°¢ ¼±¾ðÇߴµ¥ ÀÌ ¼±¾ð¹®¿¡ ÀÇÇØ ¼¼ °³ÀÇ Å¬·¡½º°¡ ±¸Ã¼ÈµÉ °ÍÀÌ´Ù. È®ÀÎÀ» À§ÇØ ¼¼ °³ÀÇ °´Ã¼¸¦ ¸¸µç ÈÄ OutValue ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °¢ ÁÂÇ¥¿¡ °ªÀ» Ãâ·ÂÇØ º¸¾Ò´Ù.
ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁö´Â Ŭ·¡½ºµµ ºÐ¸íÈ÷ Ŭ·¡½ºÀ̸ç ÀϹÝÀûÀΠŬ·¡½º¿Í ÀüÇô ´Ù¸¦ ¹Ù°¡ ¾ø´Ù. ÅÛÇø´ Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÇÏ´Â °Íµµ °¡´ÉÇÏ¸ç ¹®¹ýµµ µ¿ÀÏÇ쵂 ±â¹Ý Ŭ·¡½ºÀÇ À̸§¿¡ < > °ýÈ£°¡ »ç¿ëµÇ´Â Â÷À̹ۿ¡ ¾ø´Ù. ´ÙÀ½ Ŭ·¡½º´Â PosValue<int>·ÎºÎÅÍ »õ·Î¿î Ŭ·¡½º¸¦ ÆÄ»ýÇÑ´Ù.
class PosValue2 : public PosValue<int> { ... }
ÅÛÇø´ Ŭ·¡½º°¡ ´Ù¸¥ Ŭ·¡½ºÀÇ ±â¹Ý Ŭ·¡½º·Î »ç¿ëµÇ¸é ÄÄÆÄÀÏ·¯´Â Ŭ·¡½º¸¦ Áï½Ã ±¸Ã¼ÈÇÑ´Ù. ¼³»ç ÀÌ Å¬·¡½ºÀÇ ÀνºÅϽº ¼±¾ð¹®ÀÌ ¾ø´õ¶óµµ ¸»ÀÌ´Ù. ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁöÁö ¾ÊÀº ÀÏ¹Ý Å¬·¡½ºÀÇ Æ¯Á¤ ¸â¹ö ÇÔ¼ö¸¸ ÅÛÇø´À¸·Î ¼±¾ðÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ¸â¹ö ÇÔ¼öµµ ºÐ¸íÈ÷ ÇÔ¼öÀ̹ǷΠŸÀÔ¿¡ µû¶ó ¿©·¯ ¹úÀÌ ÇÊ¿äÇÏ´Ù¸é ¿øÇÏ´Â ÇÔ¼ö Çϳª¸¸ ÇÔ¼ö ÅÛÇø´À¸·Î ¸¸µé¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â ±× ¿¹¸¦ º¸¿© ÁØ´Ù.
|
¿¹ Á¦ : TempMember |
#include <Turboc.h>
#include <iostream>
using namespace std;
class Some
{
private:
int mem;
public:
Some(int m) : mem(m) { }
template <typename T>
void memfunc(T a) {
cout << "ÅÛÇø´ Àμö = " << a << ", mem = " << mem << endl;
}
};
void main()
{
Some s(9999);
s.memfunc(1234);
s.memfunc(1.2345);
s.memfunc("string");
}
Some Ŭ·¡½º¿¡´Â ÇÔ¼ö ÅÛÇø´ÀÌ Çϳª Æ÷ÇԵǾî ÀÖÀ¸¸ç ÀÌ ÇÔ¼ö´Â ÀÓÀÇ Å¸ÀÔ TÇüÀÇ º¯¼ö a¸¦ Àμö·Î Àü´Þ¹Þ¾Æ ±× °ªÀ» ȸéÀ¸·Î Ãâ·ÂÇÑ´Ù. ½ÇÁ¦ ¾î¶² ¸â¹ö ÇÔ¼ö°¡ È£ÃâµÇ´Â°¡¿¡ µû¶ó Ŭ·¡½º SomeÀÇ ¸â¹ö ÇÔ¼ö °³¼ö°¡ °áÁ¤µÉ °ÍÀÌ´Ù.