본문 바로가기
IT 컴퓨터_프로그램 /c++

템플릿

by 건축직일상 2015. 10. 18.


int Sum(int iA, int iB)

{

return iA + iB;

}


float Sum(float fA, float fB)

{

return fA + fB;

}


double Sum(double dA, double dB)

{

return dA + dB;

}

void    main(void)

{

cout << Sum(10, 20) << endl;

cout << Sum(40.3425f, 20.1312f) << endl;

cout << Sum(20.51, 30.15) << endl;

cout << Sum(10, 20.4242f) << endl;

//이런식의 함수오버로딩은 기본적으로 가능하다 
//일일히 만들지않고 템플릿을 이용해서 여러개의 자료형에대해 대응하여 사용할수있게 할수있다. 

}


//템플릿

템플릿선언<자료형>


오피스같은것들 에서 서식으로 쓴다 어떤 문서를 만들기 위한 틀로서

코드에서 일정한 구조하 있고 사용자가 데이터만 입력하면 되는 그런형태로 만들수있게 해준다

1. 기능은 이미 결정되어있다

2. 데이터의 형식은 정해져있지않다


////////////////////////////////////////////////////


template<class T>

class CObj

{

private:

T    thp;

public:

//템플릿으로 들어온 자료형에 맞도록 멤버를 만들고 인터페이스 함수도 만들수있다

void    SetHp(T    _hp)

{

thp =_hp;

}

T    GetHp(void)

{

return thp;

}

public:

Cobj(void){;}

CObj(T    _t)

{

thp = _t;

}

};

void    main(void)

{

//클래스 템플릿으로 객체 만듬

CObj<int>    obj(10);

obj.SetHp(10;

cout << obj.GetHp() << endl;

//이것 자체가 클래스는 아니고 템플릿을 사용해서 객체를 만들면 

//타입에 해당하는 클래스가 만들어지고 그 클래스를 통해서 객체를 만드는것이다

//함수 템플릿은 함수를 수동으로 오버로딩 할때와 같이 내부적으로 함수를 여러개 생성하는것이다

//템플릿만 만들었을때는 함수가 아니다


}

//클래스를 템플릿으로 만들고 헤더랑 분리해서 컴파일할때 유효성 선언을 다시 해야 한다 


//////////////////////////////

Test.h


#pragma once


template<typename T>

class CTest

{

private:

T    m_tValue;

T    GetValue(void);

void    Set(T    _T);

public:

CTest(void);

CTest(T    _t){m_tValue = _T;}

~CTest(void);

};


////////////////////////////////////////

Test.cpp


#include "Test.h"


template<typename T>

CTest<T>::CTest(void)

{


}

template<typename T>

CTest<T>::~CTest(void)

{


}




template<typename T>

T CTest<T>::GetValue(void)

{


}


template<typename T>

void CTest<T>::SetValue(T _t)

{


}


//선언부와 구현부를 분리시킬수는 있는데..

//템플릿 선언 유효성이 있기 때문에

//매번 위와같이 다시 템플릿 선언을 해야 한다.

//귀찮아진다

'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글

STL 기초 학습  (0) 2015.10.20
메크로함수  (0) 2015.10.18
연산자 오버로딩  (0) 2015.10.18
오버라이딩_virtual2  (0) 2015.10.13
오버라이딩_virtual  (0) 2015.10.13

댓글