C++ 15.템플릿
title: “C++ 15.템플릿” categories:
-
CspecialCharspecialChar
#C++ 15.템플릿 : 네이버 블로그
템플릿을 사용하면 함수의 매개변수를 여러 자료형으로 쓸 수 있다
먼저 예시를 들겠다
template
void bigger(T a, T b) {
if (a > b)
cout << a;
else
cout << b;
}
위는 입력된 두개를 비교해 큰것을 출력하는 bigger함수이다
먼저 템플릿을 사용하기 위해서는 template을 사용할 함수 앞에 써야한다
꼭 위가 아닌 옆에
template
같이 써도 무방하다
class T는 T형식의 자료형이란 뜻이다
그럼 T형식의 자료형임은 어디서 판단될까?
바로 매개변수에서 입력을 T a로 받으면 int a처럼 T형식 a를 받게 된다
즉 입력받은 자료형이 T가 된다
bigger(3,3)이면 T는 int형
bigger(‘a’,’b’)면 T는 char형이다
마찬가지로 다른 자료형 double도 포함된다
만약 매개변수가 서로 다른 자료형이면 어떻게 해야 할까?
그냥 biggere(3,1.1)처럼 실행하면 오류가 나게 된다
바로 template<class T1,class T2>처럼 class를 추가하면 된다
그럼 T1,T2는 서로 다른 자료형을 가질 수 있다
template를 사용하면 다양한 자료형을 매개변수로 받을 것이다
배열은 T a [] 형식처럼 []만 추가하면 된다
중요한 점은 탬플릿을 사용하더라도 이미 정의되어 있는 함수가 있으면 그 함수로 작동된다
즉 함수는 매개변수가 다르면 서로 다른 함수가 된다
그러므로 이미 void bigger(int x,int y)가 있는 상태에서 bigger(1,1)을 실행하면 템플릿되어있는 함수가 아닌 정확이 정의가 되어있는 void bigger(int x,int y)가 실행된다
이렇게 template를 사용해 다양한 자료형을 받는 것을 일반화라고 하고 이런 함수를 제너릭 함수라 한다
그럼 함수를 일반화하는 방법을 알았고
클래스를 일반화해보자
먼저 마찬가지로
template
그 후 일반적인 클래스 선언을 해준다
T는 매개변수에 따라 달라진다
만약 생성자에서 무엇인가 받는다면
이름(T a){
}
의 형식의 생성자를 사용하면 된다
아래 예제를 들어보았다
#include
using namespace std;
template
class bigger {
public:
bigger(T1 a, T2 b) {
if (a > b)
cout << a;
else
cout << b;
}
};
int main() {
int a = 3;
int b = 5;
bigger(a, 1.1);
}
마찬가지로 bigger이다
class 위에 template를 쓰고
생성자의 매개변수에 따라 다른 생성자가 만들어진다