728x90
함수 템플릿
: 구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의 (일반화 프로그래밍)
- 특정한 데이터형에 귀속되지 않음
- template <class ___>이라는 키워드로 생성 (template <typenName ___>)
#include <iostream>
using namespace std;
//class 혹은 typeName
template <class Any> //Any: 사용자가 사용할 데이터형이 정해지지 않은 상태
Any sum(Any, Any);
int main() {
int a = 3;
int b = 4;
cout << sum(a,b) << endl; //Any가 int로 매칭
float c = 3.14;
float d = 1.592;
cout << sum(c, d) << endl; //Any가 float로 매칭
// cout << sum(a, c) << endl; //int와 float이 모두 사용됨
// 처음 함수 원형 선언할 때 Any sum(int, Any)로 바꾸면 주석처리한 코드가 동작함
// 그러나 '일반화' 취지를 더 살리려면, 템플릿에도 오버로딩을 적용함
return 0;
}
template <class Any>
Any sum(Any a, Any b) {
return a+b;
템플릿 오버로딩
#include <iostream>
using namespace std;
/*함수 원형 선언*/
template <class Any> //Any: 사용자가 사용할 데이터형이 정해지지 않은 상태
Any sum(Any, Any);
template <class Any>
Any sum(int, Any);
/*main 함수*/
int main() {
int a = 3;
int b = 4;
// cout << sum(a,b) << endl;
//a, b가 모두 int인 경우는 두 가지 sum에 모두 매칭됨 -> 사용불가
float c = 3.14;
float d = 1.592;
cout << sum(c, d) << endl; //4.732
cout << sum(a, c) << endl; //6.14
return 0;
}
/*함수 정의*/
template <class Any>
Any sum(Any a, Any b) {
return a+b;
}
template <class Any>
Any sum(int a, Any b) {
return a+b;
}
728x90
'개발 > c++' 카테고리의 다른 글
[c++] 분할 컴파일 / Preprocessor & Compiler & Linker (2) | 2023.09.08 |
---|---|
[c++] 배열과 문자열이 헷갈리지 (1) | 2023.09.07 |
[c++] 함수 오버로딩 (0) | 2023.09.05 |
[c++] 문자열과 포인터 (0) | 2023.09.05 |
[c++] 클래스 디자인하기 (feat. 멤버변수 / 멤버함수 / private & public / inline) (0) | 2023.09.04 |