[C++]Template로 자료형에 대한 다형성 지원!
Posted 2007/08/21 21:12
아래의 두 함수를 보자.
void Swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void Swap(float &a, float &b)
{
float temp;
temp = a;
a = b;
b = temp;
}
두 함수는 기능이 동일한 함수이다. 차이점을 가만히 살펴보면 자료형을 알려주는 곳 이외에 다른점은 하나도 없다. 이러한 함수를 Template를 사용하여 하나로 표현 할 수 있다.
template <typename TYPE>
void Swap(TYPE &a, TYPE &b)
{
TYPE temp;
temp = a;
a = b;
b = temp;
}
자 편하지 않은가? 하지만 컴파일을 할 경우에 사용한 자료형만큼의 소스가 생성된다는거. 결국 template는 코딩의 편의성만을 제공한다.
또한 template는 함수말고도 Class에서 사용이 가능하다!
아래 두 클래스를 보자.
class U_Point
{
public:
U_Point ( int _x, int _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
int x;
int y;
}
class U_Point
{
public:
U_Point ( float _x, float _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
float x;
float y;
}
역시 또한 위의 예제처럼 자료 형만 다르고 모두 동일하다. Template를 적용해보면
template <typename TYPE>
class U_Point
{
public:
U_Point (TYPE _x, TYPE _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
TYPE x;
TYPE y;
}
이렇게 된다. 단, 클래스 사용시에는 한가지 주의해야 할 점이 있다. 함수는 다형성을 지원하기에 바로 사용하면 되지만 클래스같은 경우에는 같은이름으로 여러 클래스를 지원하지 않는다는 점이다. 그러므로 사용하려면
U_Point<int> point1(1,2);
U_Point<float> point2(2.4, 3.6);
이런식으로 해주어야 한다.
void Swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void Swap(float &a, float &b)
{
float temp;
temp = a;
a = b;
b = temp;
}
두 함수는 기능이 동일한 함수이다. 차이점을 가만히 살펴보면 자료형을 알려주는 곳 이외에 다른점은 하나도 없다. 이러한 함수를 Template를 사용하여 하나로 표현 할 수 있다.
template <typename TYPE>
void Swap(TYPE &a, TYPE &b)
{
TYPE temp;
temp = a;
a = b;
b = temp;
}
자 편하지 않은가? 하지만 컴파일을 할 경우에 사용한 자료형만큼의 소스가 생성된다는거. 결국 template는 코딩의 편의성만을 제공한다.
또한 template는 함수말고도 Class에서 사용이 가능하다!
아래 두 클래스를 보자.
class U_Point
{
public:
U_Point ( int _x, int _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
int x;
int y;
}
class U_Point
{
public:
U_Point ( float _x, float _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
float x;
float y;
}
역시 또한 위의 예제처럼 자료 형만 다르고 모두 동일하다. Template를 적용해보면
template <typename TYPE>
class U_Point
{
public:
U_Point (TYPE _x, TYPE _y )
{
x = _x; y = _y;
}
void ToString()
{
cout << "x = " << x << ", " << "y = " << y << endl;
}
private:
TYPE x;
TYPE y;
}
이렇게 된다. 단, 클래스 사용시에는 한가지 주의해야 할 점이 있다. 함수는 다형성을 지원하기에 바로 사용하면 되지만 클래스같은 경우에는 같은이름으로 여러 클래스를 지원하지 않는다는 점이다. 그러므로 사용하려면
U_Point<int> point1(1,2);
U_Point<float> point2(2.4, 3.6);
이런식으로 해주어야 한다.
** 이 글의 저작권은 모두 저자에게 있습니다.
수정, 배포시 저작권을 표시해주시기 바랍니다.
** 오타, 잘못된 내용이 있으면 적극적으로 알려주시기 바랍니다 :)
** 질문사항 또한 적극적으로 받겠습니다.
Copyright (c) NEWMS 2007 All right Reserved.
수정, 배포시 저작권을 표시해주시기 바랍니다.
** 오타, 잘못된 내용이 있으면 적극적으로 알려주시기 바랍니다 :)
** 질문사항 또한 적극적으로 받겠습니다.
Copyright (c) NEWMS 2007 All right Reserved.
'눈으로 보이는 > 배움' 카테고리의 다른 글
| Window State Messages Constants (0) | 2007/08/22 |
|---|---|
| [C]리틀엔디안(Little Endian)과 빅엔디안(Big Endian), 그리고 상호 변환 함수 (0) | 2007/08/22 |
| [C++]Template로 자료형에 대한 다형성 지원! (2) | 2007/08/21 |
| Winsock 프로그래밍을 위한 준비작업! (0) | 2007/08/21 |
| Newms's Basic Assembly for Reverse Engineering #2 (0) | 2007/08/21 |
| Newms's Basic Assembly for Reverse Engineering #1 (0) | 2007/08/21 |
- Filed under : 눈으로 보이는/배움
- Tag : C++, template
- 2 Comments Trackback
joongs
| 2007/08/21 21:55 | PERMALINK | EDIT | REPLY |와.. Template에 대해서 잘 설명한 것 같넹
newms
| 2007/08/21 22:13 | PERMALINK | EDIT |아, 형!!ㅋㅋ 고마워요