template과 상속 조합

Program Lang./C++ 2016. 7. 7. 10:30

템플릿 기반의 기반 클래스에서 자식 클래스를 상속 받는 경우에 대해서 정리


1. 소스 트리

.

├── CMakeLists.txt

├── test.cpp

├── test.h


2. 기반 클래스


템플릿 기반의 기반 클래스는 test.h 파일에 선언 및 정의되어 있다.

printContents는 순수 가상함수로 선언하여서 자식 클래스의 데이터 타입에 맞게 구현하도록 했다.


3. 템플릿 기반의 기반 클래스에서 자식 클래스 상속


임의의 타입 T를 자식 클래스에서 계속 계승할 경우에 선언과 정의는 모두 헤더 파일(test.h)에 존재하고

아래와 같은 형식을 갖는다. 즉 template <typename T>가 계속 따라 다닌다.


새로운 템플릿 기반 자식 클래스가 생성되었다.

다만 mA는 기반 클래스에서 상속 받았으므로 자식 클래스에서 기반 클래스 데이터를 초기화하는 부분과

신규로 추가한 get() 함수에 대해서 구현 방식에 주의하면 된다.  



4. 템플릿 기반 기반 클래스에서 상속을 받되 특정 타입을 고정해서 받는 경우


문법적으로 정확히 맞는지는 모르겠지만 문제는 없어 보인다.

템플릿의 특수화와 조금 유사하지만 상속까지 더해져서 기본 템플릿 특수화와의 차이점 구분이 필요.


상속을 받지만 특수화가 되었다는 측면에서 클래스의 맴버함수 정의는 구현 파일로 옮겨도 될 것 같다.

일단 임의의 타입으로 하나의 구조체를 선언하고 이 구조체만을 위한 자식 클래스를 기반 클래스에 타입으로

주고 상속을 받았다. 이런 경우를 머라 불러야 하는지?


5. 테스트


6. 상속에 의한 특수화가 아닌 템블릿 중에 하나의 타입에 대한 Specialization 예제


person 타입을 기반클래스에서 주고 자식 클래스에서 이를 상속 받는 개념은 위의 예제에서

봤다. 사실 이게 맞는 것인지는 모르겠다. 이 부분은 표준 라이브러리 예제를 찾아봐야겠다.


원래 c++ 문법에서 나오는 특정 타입으로 특수화를 위한 코드로 변경하면 아래와 같다. 


개인적으로 위의 코드가 더 이상해 보인다. 템플릿에 기존 데이터랑 함수가 다 정의되어 있는데

특정 타입을 위한 클래스를 반복적으로 정의하는 것은

차라리 기반 클래스에서 특정 타입만 상속해서 사용하는 것이 더 맞는 것 아닌가?


테스트 코드


: