하나의 제네릭 타입을 가진 겨우
- 두 개의 매개 변수로부터 큰 값 구하기
template <class T>
T bigger(T a, T b) // 두 개의 매개 변수를 비교하여 큰 값을 리턴
#include <iostream>
using namespace std;
template <class T>
T bigger(T a, T b) { // 두 개의 매개 변수를 비교하여 큰 값을 리턴
if(a > b) return a;
else return b;
}
int main() {
int a=20, b=50;
char c='a', d='z';
cout << "bigger(20, 50)의 결과는 " << bigger(a, b) << endl;
cout << "bigger('a', 'z')의 결과는 " << bigger(c, d) << endl;
}
- 배열의 합 구하기
template <class T>
T add(T data [], int n) // 타입 T의 배열 data에서 n개의 원소를 합한 결과를 리턴
#include <iostream>
using namespace std;
template <class T>
T add(T data [], int n) { // 타입 T의 배열 data에서 n개의 원소를 합한 결과를 리턴
T sum = 0;
for(int i=0; i<n; i++) {
sum += data[i];
}
return sum; // sum와 타입과 리턴 타입이 모두 T로 선언되어 있음
}
int main() {
int x[] = {1,2,3,4,5};
double d[] = {1.2, 2.3, 3.4, 4.5, 5.6, 6.7};
cout << "sum of x[] = " << add(x, 5) << endl; // 배열 x와 원소 5개의 합을 계산
cout << "sum of d[] = " << add(d, 6) << endl; // 배열 d와 원소 6개의 합을 계산
}
두 개 이상의 제네릭 타입을 가진 경우
두 개 이상의 제네릭 타입을 가진 제네릭 함수를 만들 수 있다
#include <iostream>
using namespace std;
// 두 개의 제네릭 타입 T1, T2를 가지는 copy()의 템플릿
template <class T1, class T2>
void mcopy(T1 src [], T2 dest [], int n) { // src[]의 n개 원소를 dest[]에 복사하는 함수
for(int i=0; i<n; i++)
dest[i] = (T2)src[i]; // T1 타입의 값을 T2 타입으로 변환한다.
}
int main() {
int x[] = {1,2,3,4,5};
double d[5];
char c[5] = {'H', 'e', 'l', 'l', 'o'}, e[5];
mcopy(x, d, 5); // int x[]의 원소 5개를 double d[]에 복사
mcopy(c, e, 5); // char c[]의 원소 5개를 char e[]에 복사
for(int i=0; i<5; i++) cout << d[i] << ' '; // d[] 출력
cout << endl;
for(int i=0; i<5; i++) cout << e[i] << ' '; // e[] 출력
cout << endl;
}
중복 함수가 템플릿 함수보다 우선
템플릿 함수에 디폴트 매개 변수 사용
'C++ > [책 정리] 명품 C++ 프로그래밍' 카테고리의 다른 글
4. C++ 표준 템플릿 라이브러리(STL)와 활용 (0) | 2023.04.22 |
---|---|
3. 제네릭 클래스 만들기 (0) | 2023.04.22 |
1. 일반화와 템플릿 (0) | 2023.04.22 |
9. 바람직한 C++ 프로그램 작성법 (0) | 2023.04.05 |
8. C++ 구조체 (0) | 2023.04.05 |