함수의 형태는 동일한데, 자료형이 계속 달라서 저렇게 함수들을 일일이 만드는 것은 노가다에 불과하다...
모든 자료형에 적용되는 것이 없을까? 해서 나온게 Template 이다.
template<typename "이름">으로 주로쓴다.
template<class "이름">을 써도 같은 동작을 한다.
클래스의 객체를 활용하려면, 연산자를 오버로딩해줘야한다.
_____________________________________________________________________________________________________________________________
현재 m_data 동적배열에 아무 자료형을 넣기 위해 T로 해주었다. operator [] 의 경우 return type 역시 아무자료형이 나와야하므로 T로 해줬다.
이 경우, 내가 어떤 자료형을 쓸 것인지(인수)를 명시해줘야겠지.
옆에 <자료형> 을 붙여주면된다.
만약 헤더파일 안의 저 print()함수를 클래스 밖으로 빼고 싶다면 저렇게 마찬가지로 < > 를 통해 인자를 명시해줘야한다. 이 인자를 명시해줘야한다 때문에 생기는 문제가 있다.
(설명)
내가 새로 CPP 파일을 만들어서 해당 print()함수를 넣어줬다.
난 분명히 헤더파일을 include해줬기 때문에 문제가 없어보인다.
하지만, main 함수에서 <double>이라는 자료형을 명시해줬지만, main 함수는 MyArray헤더파일을 include해줬을 뿐,
MyArray Cpp파일은 include를 안해줘서 MyArray.cpp의 print()함수는 자료형 인수가 무엇인지 명시가 안되어 오류가
난다.
해결책은 ?
1. main파일에 MyArray.cpp를 include해준다.
-> 하지만 좋은 방법은 아님. 그러면 cpp 생길때마다 계속 include를 해주면 난리나잖아.
2. MyArray.cpp파일 안에 T가 main함수에는 어떤 자료형이다를 명시해주면 되니까
template class MyArray<char>; // 이건 MyArray클래스가 char을 자료형인자로 받았다로 명시
template void MyArray<double>::print(); // 이건 MyArray클래스가 double로 받았고 이를 print()에서 사용한다.
Template가 만능이긴 하지만, 자료형을 명시해주는 것 중요하다!
'C++(따라하며 배우는 C++)' 카테고리의 다른 글
Chapter 13 -(3). 템플릿을 부분적으로 특수화 (0) | 2021.11.11 |
---|---|
Chapter 13-(2). 템플릿 Template (template<> specialization) (0) | 2021.11.09 |
Chapter 12(가상 함수들) 끝. (0) | 2021.11.06 |
Chapter 12-7, 8. 순수 가상 함수, 추상 기본 클래스, 인터페이스 클래스, 다이아상속문제 (0) | 2021.11.03 |
Chapter 12-1~6. 가상 함수들(virtual) (21.11.2) (0) | 2021.11.02 |