반응형
템플릿은 함수를 만들어 내는 형틀같은 것으로, 함수의 기능은 결정되어 있으나, 함수의 자료형은 결정되어 있지 않다.
템플릿을 이용하면 다양한 자료형의 함수를 만들어 낼 수 있다.
#include <iostream>
using namespace std;
template <typename T> // T라는 이름으로 템플릿을 정의. typename대신 class를 써도 된다.
T Add(T num1, T num2) {
return num1 + num2;
}
double Add(double num1, double num2) { // 일반함수
return num1+num2;
}
void main() {
cout << Add(15, 20) << endl; // 35
cout << Add(2.9, 3.7) << endl; // 6.6
cout << Add(3.2, 3.2) << endl; // 6 (자동으로 변환)
cout << Add(3.14, 2.75) << endl; // 5.89
cout << Add(6, 13) << endl; // 19 (자료형을 명시하지 않은 경우, 타입을 컴파일러가 자동으로 결정)
cout << Add(2.9, 3.7) << endl; // 6.6 (자료형을 명시하지 않은 경우, 일반 함수가 있으면 일반 함수 우선 호출)
}
두 개 이상의 자료형(Type)이 들어갈 수 있는 템플릿 선언
#include <iostream>
using namespace std;
template <typename T1, typename T> // 자료형 여러개 정의 가능
void ShowData(double num) { // 이렇게 템플릿 자료형뿐만 아니라 일반 자료형도 가능
cout << (T1)num << ", " << (T2)num << endl; // T1(num), T2(num) 로도 쓸 수 있다.
}
void main() {
ShowData <char, int> (65);
ShowData <char, int> (67);
ShowData <char, double> (68.9);
ShowData <short, double> (69.2);
ShowData <short, double> (70.4);
return 0;
}
* 참고로 C++에서는 데이터에 소괄호를 묶는 형태로 형 변환을 할 수 있다. 즉 아래 두 문장은 같은 것이다.
int num = (int)3.14;
int num = int(3.14);
반응형