Notice
Recent Posts
Recent Comments
Link
삶의 공유
[C++] 템플릿(Template) - 1 본문
728x90
반응형
*C++ 열혈 프로그래밍 참조 (윤성우 저)
템플릿(Template)에 대한 이해와 함수 템플릿
- 템플릿 : 모형자 라는 뜻이 담겨 있음.
- 1) 모형자(템플릿) 특징 : 모형을 만들어낸다. 모형의 틀언 결정되어 있지만, 모형의 색은 결정해야 된다.
- 2) 함수 템플릿 : 함수를 만들어 낸다. 함수의 기능은 결정 되어 있지만 자료형은 결정되어 있지 않아서 결정 해야된다.
즉 함수 템플릿은 함수를 만드는 도구가 된다.
예제를 통해서 같이 확인해 보자
#include <iostream>
using namespace std;
// 함수 템플릿 정의
template <typename T> // type name을 대신해서 class를 사용할수도 있다.
T Add(T num1, T num2)
{
return num1 + num2;
}
int main(void)
{
cout << Add<int>(15, 20) << endl;
// 컴파일러는 위의 문장을 보는 순간 템플릿 함수
// int Add<int>(int num1, int num2){
// return num1 + num2; }
// 을 만든다.
cout << Add<double>(2.9, 3.7) << endl;
// 컴파일러는 위의 문장을 보는 순간 템플릿 함수
// double Add<double>(int num1, int num2){
// return num1 + num2; }
// 을 만든다.
cout << Add<string>("안녕", "하세요") << endl;
// 컴파일러는 위의 문장을 보는 순간 템플릿 함수
// string Addstring<string>(int num1, int num2){
// return num1 + num2; }
// 을 만든다.
// 컴파일 할때 함수가 만들어지며, 한번 함수가 만들어지면 그 다음 부터는 만들어진 함수를 호출할뿐 새로 함수를 만들지는 않는다.
// 컴파일 할때 함수가 만들어진다고 하여, 실행속도가 늦어지는 거이 아니다. 단지 컴파일할때의 속도가 느려질뿐...
}
정리하면,
함수 템플릿은 "함술르 만드는데 사용되는 템플릿",
템플릿 함수는 "템플릿을 기반으로 만들어진 함수" 이다.
*템플릿 함수는 컴파일러에 의해 생성된 함수 이기 때문에 '생성된 함수' 혹은 '생성된 클래스'라고도 불린다.
다음 예제는 둘 이상의 형(Type)에 대핸 템플릿 선언하기.
#include <iostream>
using namespace std;
template <class T1, class T2> // Typename 대신해서 class를 사용한 case
void ShowData(double num) // 매개변수도 기본 자료형으로 선언될수 있다.
{
cout << (T1)num<< ", " << (T2)num << endl;
}
int main()
{
// 위의 함수 (ShowData)는 매개 변수 형이 double로선언되었기 때문에 전달되는 인자를 통해 T1, T2의 자료형을 결정짓지 못하기 때문에. 템플릿 함수의 호출 형식을 완전히 갖춰서 호출해야한다.
ShowData<char, int>(65); //A, 65
ShowData<char, int>(67); //C, 67
}
반응형
'Programing > C++' 카테고리의 다른 글
[C++] 템플릿(Template) - 2 (0) | 2021.01.19 |
---|---|
[C++] 가상 함수(상속) (0) | 2021.01.18 |
[C++] 코딩 테스트 개 문제 풀이 (0) | 2021.01.17 |
[C++] 코딩테스트 준비(백준, 고양이문제) (0) | 2021.01.14 |
[C++] Call by reference & Call by Value (0) | 2020.11.09 |