template을 사용하여 상속하거나 프랜드를 할 경우에 질문...
간단한 소스를 예로 들겠습니다...
template<typename object>
class Sequence : public List<object>
{
public:
생략
}
이런 소스입니다.
여기서
class Sequence : public List<object>
를 모르겠습니다. 상속인 것은 알겠습니다. List라는 클래스를 상속 받은 것 까지도
알겠는데, 뒤에 <object>가 붙은 걸 모르겠습니다.
template선언에 의해서 template형 변수를 가진 클래스를 상속받는다라고 하시는 분을
봤지만, 이해가 가지 않는 것은,
List라는 클래스를 정의를 할 때, 이미 데이터 맴버를 template으로 정의를 하고,
그걸 상속 받으면 어차피
template 타입의 데이터맴버를 갖는 클래스를 상속 받는것 아닌가요?
굳이 저렇게 써 줘야 하는 이유를 모르겠습니다.
만드시 저렇게 써야 하나요?
그리고 저게 만약에 template 타입의 데이터 맴버를 갖는 클래스를 상속 받는거라고 한다
면 List에 어떻게 정의 되어 있는 데이터 맴버가 template가 되는건가요?
그 안에서 template으로 정의 된 것들인가요?
이 것도 예를 들겠습니다.
template <typename A>
class List{
private:
A size;
int lone;
char stst;
}
이렇게 정의되어 있다고 한다면
size 변수가 template이 되어 상속 받는건가요?
그럼 굳이 다시 sequence class 정의에서 상속시 <object>를 해 줄 필요가 없지 않나요?
두가지에 대해서 질문드립니다~.
----------------------------------------------------------------------------------------
윗분께는 죄송하지만 템플릿은 컴파일 타임에 타입이 결정됩니다.
템플릿은 전달인자라고 생각하시면 의외로 쉽습니다.
다만 변수가 아니라 타입을 전달하는 것이지요.
Sequence<int>
template< typename object >
class Sequence : public List<object>
{
object var;
};
object는 이제부터 int 입니다.
var변수는 int var; 이 되는것이지요.
List가 부모클래스 이므로 부모클래스가 생성되야 자식클래스(Sequence)가 생성되죠.
List도 템플릿 클래스라 템플릿 인자를 넘겨줘야 List클래스가 생성됩니다.
아까 전달받은 object...즉 int를 넘겨줍니다.
template < typename A >
class List{
private:
A size;
int lone;
char stst;
}
이제 size변수는 int size; 입니다.
이상태로 인스턴스화 되는것이지요.
class Sequence : public List
{
};
class List{
private:
int size;
int lone;
char stst;
}
이렇게 해서
Sequence sqns;
해서 생성한 것이나
아까 템플릿 버젼의
Sequence< int >
나 똑같습니다.
다만 템플릿 버젼은 double나 char형도 만들수 있겠죠.
템플릿 타입이라는건 컴파일 전에 타입을 알려줘야 컴파일이 되는 아주 강력한 타입검사 시스템 입니다.
한마디로
template < typename A >
class List{
private:
A size;
int lone;
char stst;
}
에서 size변수는 컴파일이 시작되기전에 타입이 무엇인지 알아야 컴파일이 될수 있다는 것이지요.
만약
template< typename object >
class Sequence : public List
{
};
이렇게 되었다고 한다면 List의 size변수는 어떠한 타입이여야 할까요?
그걸 결정해 주지 않는한 컴파일러는 발악하며 컴파일을 거부합니다.
상속과 템플릿을 동시에 보시니까 헤깔리시는것 같네요.
조금더 보시면 이해 되실겁니다.
----------------------------------------------------------------------------------------
안녕하세요.... 답변드릴게요
template
class List{
private:
A size;
int lone;
char stst;
}
이놈을 상속받는데요...
template이 간단히말씀드리면, 컴파일 할때는 template에서 쓸 타입(A)가 결정나는게
아닙니다.
런타임시간에.... 타입이 결정나서 그렇구요.
LIST< int>
Sequence <double>
이케되면...... 타입이 같은 타입이 아닐경우 문제가 있죠^^*
그래서 list< object> 이케 해줘야하는거죠^^*
음 이해가되시는지 잘모르겟내요^^*
'C & C++ 관련' 카테고리의 다른 글
c++ template 사용 방법이?? (0) | 2007.03.14 |
---|---|
C++ 에서 템플릿 template 에 대해서 (0) | 2007.03.14 |
_t 로 끝나는 자료형 ( ssize_t, size_t ) (0) | 2007.03.14 |