@ 16. 1 ~ 17. 1/C++

Template (2) 클래스 템플릿

namoeye 2013. 1. 29. 19:53

제공되는 기능과 내부의 행동이 모두 동일한 클래스 라면..

예를 들어

class Point
{
private:
 int xpos, ypos;
public:
 Point(int x=0, int y=0) : xpos(x), ypos(y)
 {}
 void ShowPosition() const
 {
  cout << xpos << " " << ypos << endl;
 }
};

단순히 정수로 표현되는 클래스가 있다고 해보자..그런데 실수입력도 필요하다면..? 또 정의해야하나?

template<typename T>
class Point
{
private:
 T xpos, T ypos;
public:
 Point(int x=0, int y=0) : xpos(x), ypos(y)
 {}

 void ShowPosition() const
 {
  cout << xpos << " " << ypos << endl;
 }
};

이런식으로 클래스 템플릿을 만든다.. 물론. 함수 템플릿과 똑같다.

객체를 생성할때는..

Point<int>pos1(3,5);

Point<char>pos2('C','T');

이런식으로 하며 반드시 자료형을 써야한다. <int> 같은..

안하게 되면 클래스 템플릿을(를) 사용하려면 템플릿 인수 목록이 있어야 합니다. 라는..오류가 발생된다.

 

클래스의 멤버함수를 외부에서 정의하려면.(위에 Showposition함수)

template<typename T>

void Point<T>::ShowPosition() const

{ }

이런식으로 한다..typename T를 해주고..

클래스 뒤에<T>를 해준다. T에 대해 템플릿화된 Point 클래스 템플릿..Point<T>

 

2. 템플릿 클래스의 선언과 정의를 각각 헤더파일과 소스파일에 구분하여 작성 후 컴파일 시 에러가 발생된다.

해결방법으로는..

메인 소스파일에 #include "템플릿 클래스.cpp"를 하거나..

템플릿 클래스.헤더파일에 함수의 정의를 모두 넣거나..

아님 안하거나..??? :p