[Basic C++] #55-5_템플릿 클래스의 파생 클래스, 템플릿 클래스의 상속

2022. 8. 4. 13:17· 언어/Basic C++
목차
  1. [Basic C++] #55-5_템플릿 클래스의 파생 클래스, 템플릿 클래스 상속

[Basic C++] #55-5_템플릿 클래스의 파생 클래스, 템플릿 클래스 상속

C++의 템플릿 중 "템플릿 클래스 상속"에 대해 알아보겠습니다.

"전문가를 위한 C"의 11 항목, "템플릿을 이용한 제네릭 코드 작성"에 해당하는 내용입니다.

 

 


 

템플릿 클래스 상속
1. 인스턴스화 되지 않은 템플릿 원본 상속 ---> 템플릿 O
2. 인스턴스 상속 ---> 템플릿 X

 

인스턴스화되지 않은, 즉 원본 템플릿 클래스를 상속하는 하위 클래스는 항상 템플릿으로 작성해야 합니다.

반면에, 템플릿 클래스의 인스턴스를 상속하는 경우 하위 클래스는 템플릿일 필요가 없습니다.

 

// 템플릿 클래스(SuperClass)의 파생 클래스(SubClass) 정의
template<typename T>
class SubClass : public SuperClass<T>
{
public:
    SubClass( size_t inWidth = SuperClass<T>::DefaultWidth, size_t Height = SuperClass<T>::DefaultHeight)
    void Move( size_t srcX, size_t srcY, size_t destX, size_t destY ); 
};

 

기본적으로 우리가 알고 있는 클래스의 상속을 작성하는 방법과 크게 다르지 않습니다!

 

// SubClass의 멤버 메서드 정의부
template<typename T>
SubClass<T>::SubClass(size_t inWidth, size_t inHeight )
{
    //...
}

template<typename T>
void SubClass<T>::Move(size_t srcX, size_t srcY, size_t destX, size_t destY)
{
    //...
}

 

멤버 메서드의 정의 또한 비슷합니다!

 

템플릿 상속 vs 템플릿 특수화

 

  상속 특수화
코드 재사용? O X
이름 재사용? X O
다형성 지원? O X

 

템플릿 상속과 템플릿 특수화의 차이점을 간단히 살펴보겠습니다.

 

1. 코드 재사용?

템플릿 상속의 경우 원본 템플릿 클래스의 모든 것을 상속받기 때문에, 코드를 재작성할 필요가 없습니다.

반면에, 템플릿 특수화의 경우 원본 템플릿 클래스의 모든 내용을 재작성해야 합니다!

 

2. 이름 재사용?

당연하게도, 템플릿 상속의 경우 파생 클래스와 베이스 클래스의 이름을 다르게 작성해야겠죠?

하지만, 템플릿 특수화의 경우 베이스 클래스와 같은 이름을 가지겠죠!

 

3. 다형성 지원?

템플릿 상속은 "is-a" 관계가 성립합니다.

템플릿 특수화는 앞선 포스팅에서 설명했듯이, 서로 "다른 타입"을 템플릿 매개변수로 가지는 템플릿 클래스 객체들은 서로 다른 타입입니다!

 

 

다형성 이용 -> 템플릿 상속
특정 타입에 대한 특수화 -> 템플릿 특수화

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #55-7_템플릿 변수  (0) 2022.08.10
[Basic C++] #55-6_함수 템플릿  (0) 2022.08.04
[Basic C++] #55-4_템플릿 클래스의 특수화, 특정 타입에 대한 템플릿 클래스  (0) 2022.07.28
[Basic C++] #55-3_템플릿 메서드, 이중 템플릿  (0) 2022.07.27
[Basic C++] #55-2_템플릿 파라미터  (0) 2022.07.27
  1. [Basic C++] #55-5_템플릿 클래스의 파생 클래스, 템플릿 클래스 상속
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #55-7_템플릿 변수
  • [Basic C++] #55-6_함수 템플릿
  • [Basic C++] #55-4_템플릿 클래스의 특수화, 특정 타입에 대한 템플릿 클래스
  • [Basic C++] #55-3_템플릿 메서드, 이중 템플릿
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • unreal
  • 우선순위 큐
  • set
  • 최단 경로
  • Effective C++
  • 기술 질문
  • BFS
  • Unreal Blueprint
  • stl
  • 알고리즘
  • 디자인 패턴
  • BOJ
  • DP
  • programmers
  • 그래프
  • 개발
  • dfs
  • 트리
  • 정렬
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #55-5_템플릿 클래스의 파생 클래스, 템플릿 클래스의 상속
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.