프로그래밍/c++

[c++] 템플릿(template) 함수 및 클래스

rrruu 2018. 12. 20. 10:38
반응형

템플릿함수란 똑같은 내용의 함수을 자료형에따라 오버로딩할 필요 없이 한번에 뭉쳐서 정의하는 함수이다.

일반적으로 자료형을 뭉쳐놓은것을 템플릿이라고 이해하면 쉽게 이해가 될 것 같다.

함수에서 사용하면 템플릿 함수가 되는것이고, 클래스에서 사용하면 템플릿 클래스가 된다.

먼저 템플릿 함수에 대해서 알아보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename T> 
void print(T data) //템플릿 함수 정의
{
    cout << data << endl;
}
 
int main()
{
    int a = 10;
    float b = 3.14;
    string c = "hello";
 
    print(a);
    print(b);
    print(c);
}
 
 
/*실행결과
    10
    3.14
    hello
*/
cs


T라는 템플릿을 활용해서 print함수를 만들었다.

int, float, string 어떠한 타입이 들어가도 그대로 출력이 된다.


이제 템플릿 클래스에대해서 알아보자.

템플릿 클래스가 템플릿 함수와 다른점이 있다면 선언시에 자료형을 명시를 해줘야한다는것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
template<class T> 
class Tclass // 템플릿 클래스 정의
{
private:
    T data;  // 템플릿 변수 선언
public:
    Tclass(T data) { // 생성자로 data 초기화
        this->data = data;
    }
    void print_data() {//data 출력함수정의
        cout << this->data<<endl;
    }
};
 
int main()
{
    Tclass<int> *= new Tclass<int>(10); //int형으로 명시
    Tclass<float> *T2 = new Tclass<float>(3.14); //float형으로 명시
    Tclass<string> *T3 = new Tclass<string>("hello"); //string형으로 명시
    T->print_data();
    T2->print_data();
    T3->print_data();
}
 
 
/*실행결과
    10
    3.14
    hello
*/
cs


내부에 data를 템플릿형식으로 선언해주고 public안에 생성자의 인자를 템플릿형식으로 받아와서 초기화를 한다.

각각 명시된 자료형을 가진 템플릿 클래스를 객체화 시키면서 생성자로 data변수를 초기화 시켜주고

print_data함수로 data변수를 찍어보았을때 초기화된 값으로 그대로 찍히게 된다.

반응형