LuvSea

템플릿(template)을 이용한 클래스 선언 본문

sTudy

템플릿(template)을 이용한 클래스 선언

사랑海 2010. 3. 19. 14:48
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
점의 좌표를 저장하기 위하여 Point 클래스를 만들어 int형 변수를 사용한다고 하자.
그런데 경우에 따라서 점의 좌표를 정수형이 아닌 실수형으로 저장해야 할 필요도 있다.
이럴 경우 데이터 형만 Double형으로 바꿔서 똑 같은 클래스를 만들면 된다.
이렇게 데이터 형만 바뀌고 형태가 같은 클래스를 여러 가지로 찍어내고 싶을 경우 템플릿을 사용하면 된다.


class Point
{
	public:
		// 멤버 함수
		void SetPosition(int nX, int nY);
		void Move(int nX, int nY);
		virtual void Show();

	protected:
		// 멤버 변수
		int m_nX, m_nY;
};

Point라는 클래스가 위와 같을 때 int형 데이터 타입을 임의의 데이터 타입으로 교체 가능하도록 하려면 다음과 같이 하면 된다.

template  calss Point
{
	public:
		// 멤버 함수
		void SetPosition(type nX, type nY);
		void Move(type nX, type nY);
		void Show();

	protected:
		// 멤버 변수
		type m_nX, m_nY;
};


클래스를 구현할 때도 비슷한 뭄법을 적용하는데, 단 템플릿을 이용할 때는 클래스의 구현을 소스 파일이 아닌 헤더 파일에 적어주어야 한다.
template 
void Point::SetPosition(type nX, type nY)
{
	m_nX;
	m_nY;
}

template 
void Point::Move(type nX, type nY)
{
	m_nX += nX;
	m_nY += nY;
}


template 
void Point::Show()
{
	cout << "X=" << m_nX << ", Y=" << m_nY << "\n";
}


템플릿을 이용하여 클래스를 만들었으면, 붕어빵 찍어내듯 사용하면되는데,
중요한 것은 인스턴스를 만드는 순간에 다음과 같이 데이터 타입을 지정합니다.
그러면 이전에 type이라는 와일드카드 문자가 모두 지정한 데이터 타입으로 변환되어 지정한 데이터 타입에 맞는 클래스가 생성되고,
그 클래스가 동작하게 된다.


#include "Point.h"

void main()
{
	// 인스턴스 생성
	Point  dPosition;
	Point  nPosition;

	// 변수 값 초기화
	dPosition.SetPosition(10.45, 30.52);
	nPosition.SetPosition(50, 30);

	// 현재 좌표 출력
	dPosition.Show();
	nPosition.Show();
}

'sTudy' 카테고리의 다른 글

헝가리안 표기법  (0) 2010.03.19
MFC 주요 클래스(CPoint, CSize, CRect, CString)  (0) 2010.03.19
const 키워드의 의미  (1) 2010.03.19
MultiTouch Screen 제작,시연동영상  (1) 2010.01.27
2009년 11월 24일  (0) 2009.11.24
Comments