총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2:
5화
“아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
회차
Computer Science/Object Oriented Programming
[Template] Class template
728x90
반응형
함수 템플릿과 클래스 템플릿
템플릿을 함수에서 사용할 수 있고 클래스에서 사용할 수 있다. 둘 다 틀 로 사용하는 것인데 함수 수준에서 클래스 수준으로 확대된 것만 다르다.
템플릿
템플릿은 overloading에서 함수를 특정 사용 매개변수, 반환 형식에 따라 여러 번 작성해줘야 한다는 불편함을 위해 효율적인 메모리와 시간 관리를 위해 나온 개념이다.
// function template
template <typename tem>
tem function(tem arg){ std::cout << "argument: " << arg << std::endl; return arg; }
int main(int arg, char* argv[]){
std::cout << function(3) << function('A') << function("String") << function(3.3) << std:endl; }
// class template
template <class ItemType>
class SortedType
{
private:
ItemType data[MAX_ITEMS];
int length;
public:
SortedType();
void insertItem(ItemType value);
bool findItem(ItemType & item);
ItemType getItem(int pos);
};
template <class ItemType>
ItemType SortedType<ItemType>::getItem(int pos){
if (pos < length){
return data[pos];
} else { return -1; } ;
int main(int arg, char* argv[]){
SortedType<int> sList;
SortedType<char> charList;
}
클래스 템플릿 주의 사항
- 멤버 선언과 정의를 분리할 때에는 기술할 때마다 template</typename/>을 매번 선언해야 한다.
- 클래스 밖에서 멤버를 정의할 때에 클래스 이름 옆에 </typename/>을 기술해야 한다.
- 인스턴스 선언할 때 반드시 </typename/> 을 지정해줘야 한다.
클래스 밖에서 정의하는 경우 </typename/> 를 기술하거나 지정해줘야 한다!
각각 자료형에 맞게끔 만들어진 인스턴스는 템플릿 클래스 라고 부른다. 모두 동일한 멤버를 가진다.
이게 다입니다. 굳이 써야 할까?
어떤 형식이든 배열로 관리할 수 있는 구현이 가능하다. 그럼 템플릿에서 구조적으로 메모리 자동 동적 할당 및 해제하며 복사 생성자와 이동 시맨틱을 지원하므로 성능도 좋다.
Class<int> arr(5);
Class<int> arr2(3);
arr2 = arr;
이런 코드도 오류 없이 메모리를 r-value에 맞춰 새로 생성해 문제없이 넘어갈 수 있도록 구현이 가능하다는 것이다. 추가로 템플릿도 다중 정의, 상속이 가능하다.
그것은 나중에 ~
템플릿 매개변수
템플릿 매개변수는 클래스 템플릿 내부에서 모두 접근 가능하다. 멤버 변수처럼요. 디폴트 값도 지정 가능하다.
생성자의 매개변수로 개수를 입력받는 방식 대신 사용할 수 있다.
template<typename Type = int, int nSize = 3>
class Arraytype
{
private:
int* m_pData;
public:
Arraytype(){ m_pData = new Type[nSize] };
// Arraytype(int nParam) { m_pData = new int[nParam];}
~Arraytype() {delete [] m_pDate; } ;
int main(){
Arraytype<int, 3> arr;
arr[0] = 10;
Arraytype< > arr2;
// Arraytype a(3);
템플릿을 사용한 방식과 생성자 매개변수로 입력 받는 방식을 확인할 수 있다.
end
728x90
'Computer Science > Object Oriented Programming' 카테고리의 다른 글
[JAVA] 이것이 자바다(3판) 5장 9번 답안 (1) | 2025.04.15 |
---|---|
[cpp] 복사 생성자 (2) | 2024.11.13 |
[Class] Method (2) | 2024.10.16 |
[cpp] Class (1) | 2024.10.16 |
[Polymorphism] Overloading (0) | 2024.10.15 |
2024:10:18
Computer Science/Object Oriented Programming
[Template] Class template