Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 14. 템플릿(Template) 2

Similar presentations


Presentation on theme: "Chapter 14. 템플릿(Template) 2"— Presentation transcript:

1 Chapter 14. 템플릿(Template) 2
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 14. 템플릿(Template) 2

2 Chapter 14-1. Chapter 13에서 공부한 내용의 확장
윤성우의 열혈 C++ 프로그래밍 Chapter Chapter 13에서 공부한 내용의 확장 윤성우 저 열혈강의 C++ 프로그래밍 개정판

3 Point 클래스 템플릿과 배열 클래스 템플릿
윤성우의 열혈 C++ 프로그래밍 일반적인 배열 클래스 템플릿 BoundCheckArray<int> iarr(50); BoundCheckArray<Point<int>> oarr(50); BoundCheckArray<Point<int>*> oparr(50); typedef Point<int>* POINT_PTR; BoundCheckArray<POINT_PTR> oparr(50); int형 데이터 저장 배열 Point<int> 객체 저장 배열 Point<int>형 포인터 저장 배열 Point<int>형 포인터 저장 배열

4 템플릿 클래스 대상의 함수선언과 friend 선언
윤성우의 열혈 C++ 프로그래밍 컴파일러가 생성해 내는 템플릿 클래스를 함수의 매개변수 및 반환형으로 지정하는 것도 가능하고 이러한 함수를 대상으로 friend 선언을 하는 것도 가능하다. 결론은 컴파일러가 생성하는 템플릿 클래스의 이름도 일반 자료형의 이름과 차별을 받지 않는다는 것!

5 윤성우의 열혈 C++ 프로그래밍 Chapter 클래스 템플릿의 특수화 윤성우 저 열혈강의 C++ 프로그래밍 개정판

6 클래스 템플릿 특수화 윤성우의 열혈 C++ 프로그래밍 SoSimple 클래스 템플릿에 대해서 int형에 대한 특수화
√ 클래스 템플릿을 특수화하는 이유는 특정 자료형을 기반으로 생성된 객체에 대해, 구분이 되는 다른 행동양식을 적용하기 위함이다. √ 함수 템플릿을 특수화하는 방법과 이유, 그리고 클래스 템플릿을 특수화하는 방법과 이유는 동일하다.

7 클래스 템플릿의 부분 특수화 윤성우의 열혈 C++ 프로그래밍 MySimple 클래스 템플릿
MySimple 클래스 템플릿의 <char, int>에 대한 특수화 MySimple 클래스 템플릿의 <T1, int>에 대한 부분적 특수화 T2가 int 인 경우에는 MySimpe<T1, int>를 대상으로 인스턴스가 생성된다. 위와 같이 <char, int>형으로 특수화, 그리고 <T1, int> 에 대해서 부분 특수화가 모두 진행된 경우 특수화가 부분 특수화에 앞선다. 즉, <char, int>를 대상으로 객체 생성시 특수화된 클래스의 객체가 생성된다.

8 윤성우의 열혈 C++ 프로그래밍 Chapter 템플릿 인자 윤성우 저 열혈강의 C++ 프로그래밍 개정판

9 템플릿 매개변수에는 변수의 선언이 올 수 있습니다.
윤성우의 열혈 C++ 프로그래밍 SimpleArray<int, 5> i5arr; SimpleArray<int, 5>형 템플릿 클래스 템플릿의 인자로 변수의 선언이 올 수도 있다! 템플릿 인자를 통해서 SimpleArray<int, 5>와 SimpleArray<int ,7>이 서로 다른 자료형으로 인식되게 할 수 있다. 이로써 SimpleArray<int, 5>와 SimpleArray<int, 7> 사이에서의 연계성을 완전히 제거할 수 있다. SimpleArray<double, 7> i7arr; SimpleArray<double, 7>형 템플릿 클래스

10 템플릿 매개변수는 디폴트 값 지정도 가능합니다.
윤성우의 열혈 C++ 프로그래밍 template <typename T=int, int len=7> class SimpleArray { private: T arr[len]; public: T& operator[] (int idx) { return arr[idx]; } SimpleArray<T, len>& operator=(const SimpleArray<T, len> &ref) for(int i=0; i<len; i++) arr[i]=ref.arr[i]; } }; 디폴트 값 지정 가능! int main(void) { SimpleArray<> arr; for(int i=0; i<7; i++) arr[i]=i+1; cout<<arr[i]<<" "; cout<<endl; return 0; } T에 int, len에 7의 디폴트 값 지정! 실행결과

11 윤성우의 열혈 C++ 프로그래밍 Chapter 템플릿과 static 윤성우 저 열혈강의 C++ 프로그래밍 개정판

12 함수 템플릿과 static 지역변수 윤성우의 열혈 C++ 프로그래밍 실행결과

13 클래스 템플릿과 static 멤버변수 윤성우의 열혈 C++ 프로그래밍
SimpleStaticMem<int>의 mem은 SimpleStaticMem<int>의 개체간 공유 SimpleStaticMem<double>의 mem은 SimpleStaticMem<int>의 개체간 공유

14 template<typename T> vs. template<>
윤성우의 열혈 C++ 프로그래밍 템플릿임을 알리며 T가 무엇인지에 대한 설명도 필요한 상황 템플릿과 관련 있음을 알리기만 하면 되는 상황 static 멤버 초기화의 특수화

15 Chapter 14가 끝났습니다. 질문 있으신지요?


Download ppt "Chapter 14. 템플릿(Template) 2"

Similar presentations


Ads by Google