[C++] 클래스 템플릿 사용 Array 클래스 예제
[C++] 클래스 템플릿 사용 Array 클래스 예제
함수 템플릿과 마찬가지로 클래스 템플릿도 template 키워드를 사용하여 정의할 수 있다.
Array 예제를 통해 Template 을 활용하여 다양한 타입을 지원하는 Array 클래스를 작성할 수 있다
#include <iostream> #include <string> using namespace std; template<typename T> class Array{ T* buf; int size; int capacity; public: explicit Array(int cap = 100) :buf(0), size(0), capacity(cap){ buf = new T[capacity]; } ~Array() { delete[] buf; } void Add(T data){ buf[size++] = data; } T operator[] (int idx) const{ return buf[idx]; } int GetSize() const{ return size; } }; int main(){ Array<int> arr; arr.Add(10); arr.Add(20); arr.Add(30); for (int i = 0; i < arr.GetSize(); i++){ cout << arr[i] << " "; } cout << endl; Array<double> darr; darr.Add(10.12); darr.Add(20.12); darr.Add(30.12); for (int i = 0; i < darr.GetSize(); i++){ cout << darr[i] << " "; } cout << endl; Array<string> sarr; sarr.Add("abc"); sarr.Add("ABC"); sarr.Add("Hello!"); for (int i = 0; i < sarr.GetSize(); i++){ cout << sarr[i] << " "; } cout << endl; return 0; } |
클라이언트는 컴파일시에 T타입을 확인하여 Array<int> , Array<Double>, Array<string> 클래스의 객체를 생성한다.
* 디폴트 매개변수
템플릿을 사용할 때 디폴트 매개변수를 지정할 수 있다.
template<typename T=int, int capT=100>
와 같이 지정하였을 경우 객체 선언시 Arry<> 와 같이 사용하면 디폴트로 int 타입에 capT 는 100이 대입된다.
출처: https://hyeonstorage.tistory.com/317?category=601868 [개발이 하고 싶어요]
'기타 > C++' 카테고리의 다른 글
[C++] 표준 출력 정확도 조정 (0) | 2021.03.30 |
---|---|
[C++] 범위 지정 연산자(::)와 namespace (0) | 2021.03.30 |
[C++] 표준 입출력 (0) | 2021.03.30 |
[C++]템플릿 (0) | 2021.03.30 |
[C++] 함수 템플릿 사용 template<typename T> (0) | 2019.07.30 |
[C++] 함수객체 기본 예제 (0) | 2019.07.30 |
[C++] 생성자 타입변환과 explicit (0) | 2019.07.30 |
[C++] 스마트 포인터, operator*(), operator->() 연산자 오버로딩 (0) | 2019.07.30 |