[C++] 클래스 템플릿 사용 Array 클래스 예제

2019. 7. 30. 00:11 기타/C++

[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 [개발이 하고 싶어요]