태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
템플릿이 함수에서만 이용할 수 있는게 아니라, 클래스에서도 템플릿을 이용할 수 있습니다.

바로 이 점이 특히 중요한데, 템플릿을 이용해서 각종 자료구조를 구현해놓은 클래스라던가
프로그래머라면 구미가 당기지 않을 다양한 기능을 제공하는 표준화 된 라이브러리를 바로 STL 이라고 합니다. (하지만 쉽게 접근해서 쓸 수 있을정도로 난이도가 쉽지만은 않습니다.)

일단 중요한것은, 클래스 템플릿을 어떻게 사용하는지에 대한 이해가 아닐까 합니다.

클래스 템플릿의 기본적인 형태를 코드는 다음과 같습니다. 클래스 템플릿 AAA를 선언과
함께 정의합니다.

template<typename T>
class AAA{
        T a;
public:
        AAA(T _a) : a(_a){
                cout << "Success";
        }
        AAA(){}
};

아주 단순한 클래스입니다. 생성자가 호출되면서 Success 를 출력해줍니다. 
인자 T 는 어떠한 자료형도 받을 수 있습니다. (단 생성시 어떤 자료형을 쓸것인지
명시해줘야 합니다. 밑에 설명되어져 있습니다.)

생성자를 클래스 안에서는 선언만 해주고, 정의를 클래스 밖으로 끄집어 내 줄 수도 
있습니다. 바로 다음과 같습니다.

template<typename T>
class AAA{
        T a;
public:
        AAA(T _a);
        AAA();
};
template<typename T>
AAA<T> :: AAA(T _a) : a(_a){
        cout << "Success";
}
template<typename T>
AAA<T> :: AAA(){}

이러한 클래스 템플릿을 정의한 후, main 함수에서 해당 클래스를 생성하려면,
생성전에 다음과 같이 타입 T 에 대한 정확한 타입을 명시적으로 
선언해준 후에 생성을 해야 합니다.
그 이유는,  객체가 생성될 때 가장 먼저 진행되는 일이 메모리 공간의 할당이기 때문입니다.
정확한 타입을 명시해줘야 메모리공간을 정확하게 할당시켜 줄 수 있겠죠.

int main(){
        AAA<double> a(3);
        AAA<float>* a2 = new AAA<float>(5);
}

또한, 포인터로 선언해도 동일하다는걸 확인할 수 있습니다.

만약에, 어떤 인자를 취하는 특정 클래스템플릿은 따로 새로운 자료형으로 가지고 싶다면
typedef 를 이용하면 됩니다. 
다음은 typedef 를 이용해 int 형을 취하는 클래스 템플릿 AAA을 Scavenger 로 예약해두는
코드입니다.

typedef AAA<int> Scavenger;
int main(){
        Scavenger S1(3);
        Scavenger* S2 = new Scavenger(3);
}

기본적인 사용법은 이렇습니다. STL 을 배우려면 필수적인 부분이라고 생각합니다.

추가할 내용이 있다면, 나중에라도 내용을 덧붙이도록 하겠습니다.



저작자 표시 비영리 변경 금지
Creative Commons License
Creative Commons License
http://www.iamscavenger.com/trackback/45 관련글 쓰기
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST