ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Template (2) 클래스 템플릿
    @ 16. 1 ~ 17. 1/C++ 2013. 1. 29. 19:53

    제공되는 기능과 내부의 행동이 모두 동일한 클래스 라면..

    예를 들어

    class Point
    {
    private:
     int xpos, ypos;
    public:
     Point(int x=0, int y=0) : xpos(x), ypos(y)
     {}
     void ShowPosition() const
     {
      cout << xpos << " " << ypos << endl;
     }
    };

    단순히 정수로 표현되는 클래스가 있다고 해보자..그런데 실수입력도 필요하다면..? 또 정의해야하나?

    template<typename T>
    class Point
    {
    private:
     T xpos, T ypos;
    public:
     Point(int x=0, int y=0) : xpos(x), ypos(y)
     {}

     void ShowPosition() const
     {
      cout << xpos << " " << ypos << endl;
     }
    };

    이런식으로 클래스 템플릿을 만든다.. 물론. 함수 템플릿과 똑같다.

    객체를 생성할때는..

    Point<int>pos1(3,5);

    Point<char>pos2('C','T');

    이런식으로 하며 반드시 자료형을 써야한다. <int> 같은..

    안하게 되면 클래스 템플릿을(를) 사용하려면 템플릿 인수 목록이 있어야 합니다. 라는..오류가 발생된다.

     

    클래스의 멤버함수를 외부에서 정의하려면.(위에 Showposition함수)

    template<typename T>

    void Point<T>::ShowPosition() const

    { }

    이런식으로 한다..typename T를 해주고..

    클래스 뒤에<T>를 해준다. T에 대해 템플릿화된 Point 클래스 템플릿..Point<T>

     

    2. 템플릿 클래스의 선언과 정의를 각각 헤더파일과 소스파일에 구분하여 작성 후 컴파일 시 에러가 발생된다.

    해결방법으로는..

    메인 소스파일에 #include "템플릿 클래스.cpp"를 하거나..

    템플릿 클래스.헤더파일에 함수의 정의를 모두 넣거나..

    아님 안하거나..??? :p

     

     

     

    '@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글

    포인터(1)  (0) 2013.01.29
    Template (3) 클래스 템플릿 특수화  (0) 2013.01.29
    Template (1) 함수 템플릿  (0) 2013.01.29
    비트연산자, 함수포인터, ctime  (0) 2013.01.27
    잊기전 정리..  (1) 2013.01.17
Designed by Tistory.