반응형
C++에서 클래스 템플릿은 여러 타입에 대해 동작할 수 있는 일반화된 클래스를 작성할 수 있도록 도와줍니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다. 클래스 템플릿은 아래와 같은 방식으로 선언하고 사용할 수 있습니다.
1. 클래스 템플릿 선언
#include <iostream>
using namespace std;
template <typename T> // 또는 `class T`라고 써도 동일
class MyClass {
private:
T data; // T 타입의 멤버 변수
public:
// 생성자
MyClass(T value) : data(value) {}
// 데이터 출력
void printData() {
cout << "Data: " << data << endl;
}
// 데이터 설정
void setData(T value) {
data = value;
}
// 데이터 반환
T getData() const {
return data;
}
};
2. 클래스 템플릿 사용
int main() {
// int 타입으로 MyClass 사용
MyClass<int> intObj(42);
intObj.printData(); // 출력: Data: 42
// double 타입으로 MyClass 사용
MyClass<double> doubleObj(3.14);
doubleObj.printData(); // 출력: Data: 3.14
// string 타입으로 MyClass 사용
MyClass<string> stringObj("Hello, Templates!");
stringObj.printData(); // 출력: Data: Hello, Templates!
return 0;
}
3. 클래스 템플릿의 추가적인 기능
(1) 멀티 파라미터 템플릿
template <typename T1, typename T2>
class Pair {
private:
T1 first;
T2 second;
public:
Pair(T1 f, T2 s) : first(f), second(s) {}
void printPair() {
cout << "First: " << first << ", Second: " << second << endl;
}
};
int main() {
Pair<int, string> p1(1, "One");
p1.printPair(); // 출력: First: 1, Second: One
Pair<double, double> p2(3.14, 2.71);
p2.printPair(); // 출력: First: 3.14, Second: 2.71
return 0;
}
(2) 기본 타입 지정
템플릿의 기본값을 지정할 수도 있습니다.
template <typename T = int>
class DefaultClass {
private:
T data;
public:
DefaultClass(T value) : data(value) {}
void printData() {
cout << "Data: " << data << endl;
}
};
int main() {
DefaultClass<> obj(10); // 기본 타입인 int로 사용
obj.printData(); // 출력: Data: 10
DefaultClass<double> obj2(3.14); // 명시적으로 double 지정
obj2.printData(); // 출력: Data: 3.14
return 0;
}
(3) 특수화 (Template Specialization)
특정 타입에 대해 다른 동작을 정의할 수도 있습니다.
template <typename T>
class SpecialClass {
public:
void print() {
cout << "General template" << endl;
}
};
// 특수화된 버전 (int 타입)
template <>
class SpecialClass<int> {
public:
void print() {
cout << "Specialized template for int" << endl;
}
};
int main() {
SpecialClass<double> obj1;
obj1.print(); // 출력: General template
SpecialClass<int> obj2;
obj2.print(); // 출력: Specialized template for int
return 0;
}
C++ 클래스 템플릿은 타입에 독립적인 구조를 설계할 때 매우 유용하며, 특히 STL(Standard Template Library)도 이 방식을 기반으로 동작합니다.
반응형
'C_C++' 카테고리의 다른 글
C++ 예외처리 Exception Handling (0) | 2024.11.20 |
---|---|
C++, <vector> 템플릿 이용하기 (0) | 2024.11.19 |
C++, 복사생성자 Copy Constructor (0) | 2024.11.17 |
C++, 클래스 생성자에서 동적메모리 사용하는 예 (0) | 2024.11.16 |
C++, 단항연산자 오버로딩 (전위 후위 연산자) (0) | 2024.11.15 |