본문 바로가기

클래스6

[ C++ ] 클래스 템플릿의 특수화( Class Template Specialization ) 이전에 함수 템플릿의 특수화에 대해 포스팅을 한 적이 있다. 함수 템플릿을 특수화하는 이유는 특정 자료형에 대해서는 개발자가 커스텀한 다른 템플릿 함수를 생성하기 위해서이다. 이처럼 클래스 템플릿을 특수화하는 이유는 특정 자료형에 대해서는 다르게 구분이 되는, 템플릿 클래스의 객체를 생성하기 위해서이다. 예제를 보자. Hello 클래스 템플릿을 double형에 대해서 특수화하였다. 그래서 double형으로 Hello 객체를 생성 시에 특수화한 부분을 기반으로 객체가 생성된 것을 확인할 수 있다. 그럼 Hello 클래스에 typename을 하나 더 뒀다고 생각해보자. template class Hello { ... } 그럼 이에 대하여 char형으로 특수화를 시키면 다음과 같이 될 것이다. template.. 2019. 12. 1.
[ C++ ] 배열 클래스의 템플릿화 #ifndef __ARRAY_TEMPLATE_H_ #define __ARRAY_TEMPLATE_H_ #include #include using namespace std; template class Bound_Chk_Array { private: T * arr; int len; Bound_Chk_Array(const Bound_Chk_Array& arr) { } Bound_Chk_Array& operator=(const Bound_Chk_Array& arr) { } public: Bound_Chk_Array(int _len); T& operator[] (int idx); T operator[] (int idx) const; int GetArrLen() const; ~Bound_Chk_Array(); }; .. 2019. 11. 30.
[ C++ ] 클래스 템플릿 ( Class Template ) 앞서 포스팅에 함수 템플릿을 설명하였다. 클래스 템플릿( Class Template )은 함수 템플릿처럼 클래스를 만들어 내는 도구이다. 그럼 점에 대한 클래스 템플릿을 만들어보자. 컴파일러는 24행의 Dot dot1(1, 2); 를 보고 Dot 템플릿 클래스를 생성하고, 25행의 Dot dot2(1.5, 2.5); 를 보고 Dot 템플릿 클래스를 생성한다. * 여기서 주의해야 할 점은, 템플릿 클래스는 템플릿 함수와 다르게 객체를 생성할 때 , 과 같은 자료형 정보가 반드시 표기되어야한다. 클래스 템플릿도 멤버함수를 클래스 외부에 정의하는 것이 가능하다. 위의 코드를 조금 수정해보겠다. 점의 x, y 좌표 값을 더하는 Adder 함수를 추가하였다. 멤버함수를 클래스 외부에 정의할 때도 template를.. 2019. 11. 30.
[ C++ ] String 클래스 String 클래스 선언 및 정의해보기. 구현할 사항은 1. 문자열을 인자로 전달받는 생성자의 정의 2. 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의 3. 결합된 문자열로 초기화된 객체를 반환하는 +연산자의 오버 로딩 4. 문자열을 덧붙이는 += 연산자의 오버 로딩 5. 값 비교를 진행하는 == 연산자의 오버 로딩 6. 콘솔 입출력이 가능하도록 연산자의 오버 로딩 #include #include using namespace std; class String { private: int len; char * str; public: String(); String(const char * _str); String(const String& _str); ~String(); String& operator= .. 2019. 11. 28.