1. 클래스 템플릿
1) 템플릿
- 함수나 클래스를 정의할 때, 특정 데이터 형을 사용하는 대신 범용형을 사용
- 여러가지 데이터 형에 대해서 함수 정의나 클래스 정의가 가능
- 장점
- 함수 코드의 재사용
- 단점
- 포팅에 취약
- 컴파일러에 따라 지원 X
- 컴파일 오류 메세지 빈약 → 디버깅에 많은 어려움
- 포팅에 취약
2) 클래스 템플릿의 선언
- 제너릭 클래스 만들기
3) 클래스 템플릿의 인스턴스화
- 항상 명시적으로 지정
- 객체를 생성할 때, 템플릿의 파라미터 지정
- 객체를 생성하지는 않지만, 객체에 대한 포인터나 레퍼런스를 정의하면서 템플릿의 파라미터 지정
4) 템플릿의 특징
- 실제로 사용되기 전까지는 코드가 생성되지 않음
- 코드 크기를 최소화
- 미리 코드를 만드는 것이 아니라 컴파일러가 해당 코드를 컴파일 시 클래스의 코드를 생성
Ex) 2개의 제너릭 타입을 가진 클래스 만들기
#include <iostream>
using namespace std;
template <class T1, class T2> // 2개의 제네릭 타입 선언
class GClass {
T1 data1;
T2 data2;
public:
GClass();
void set(T1 a, T2 b);
void get(T1& a, T2& b);
};
template <class T1, class T2>
GClass<T1, T2>::GClass() {
data1 = 0; data2 = 0;
}
template <class T1, class T2>
void GClass<T1, T2>::set(T1 a, T2 b) {
data1 = a; data2 = b;
}
template <class T1, class T2>
void GClass<T1, T2>::get(T1& a, T2& b) {
a = data1; b = data2;
}
int main() {
int a;
double b;
GClass<int, double> x;
x.set(2, 0.5);
x.get(a, b);
cout << "a=" << a << '\t' << "b=" << b << endl;
char c;
float d;
GClass<char, float> y;
y.set('m', 12.5);
y.get(c, d);
cout << "c=" << c << '\t' << "d=" << d << endl;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
11) 가상 함수와 추상 클래스 (0) | 2023.12.09 |
---|---|
10) 상속 (0) | 2023.12.09 |
9) friend와 연산자 중복 (0) | 2023.12.08 |
8) 함수와 참조, 복사생성자 (0) | 2023.12.08 |
7) 여러가지 객체의 생성 방법 (1) | 2023.11.03 |