이 스레드를 호출하는 방법을 알지 못했습니다. 상황은 다음과 같습니다. 내가 class Boxes
의 개체를 잡고, Array<T>
에서 파생 된 특수 클래스를 작성하고 싶습니다 지금C++ 템플릿에서 파생 된 클래스가 템플릿의 생성자를 호출하는 방법은 무엇입니까?
template <typename T> class Array{
private:
T* m_cData;
int m_nSize;
static int s_iDefualtSize;
public:
Array();
Array(int nSize);
}
: 나는 템플릿 클래스 Array<T>
이
class Boxes{
private:
double m_dFull;
public:
Boxes(double dFull=0): m_dFull(dFull) {}
};
을 내가 할 그 다음과 같은 방법으로 :
class BoxesArray : public Array<Boxes>{
public:
BoxesArray() : Array<Boxes>::Array() {}
BoxesArray(int nValue) : Array<Boxes>::Array(nValue) {}
}
그리고 난 단지 Boxes
을 의미하는 일부 추가 기능을 추가합니다. 좋아, 여기 혼란 넘버 원이 온다. ArrayBoxes()
을 호출하면 개체 배열을 인스턴스화하고이 개체를 Box를 보관하기 위해 "준비"하는 것처럼 보입니다. 그러나 생성 후 오브젝트 ArrayBoxes
이 Boxes로 이미 채워지는 것은 어떻게됩니까 (위 코드의 어느 부분)? 그리고 두 번째 질문은 ArrayBoxes를 채우는 상자가 Boxes의 기본 생성자 (상자 m_dFull
이 0으로 설정 됨)를 사용하여 생성된다는 것을 알 수 있습니다. 그러나 ArrayBoxes가 기본적으로 Boxes의 매개 변수 생성자를 사용하여 인스턴스화되도록하려면 어떻게해야합니까? (예를 들어 Box m_dFull = 0.5
)? 희망하는 모든 편집 내 질문에 지금은 분명하다.
부모 클래스의 기본 생성자를 호출 할 필요가 없으며 암시 적으로 호출됩니다. – mfontanini
'Array'의 기본 생성자는 무엇을합니까? 우리가 볼 수 있을까요? 상속의 의미에 대해 명확하지 않은 것처럼 들립니다. 'ArrayBoxes'는'Array '이므로,'Array '기본 생성자에서했던 것은'ArrayBoxes'에 영향을 미칩니다. –
andre
'Array :: Array()'에 인수가없는 것을 감안할 때 왜'ArrayBoxes() {}'가 작동하지 않는지 이해하기 위해 늘고 있습니다. –
WhozCraig