1
我是Java人,並試圖通過類模板編寫inheritince,而我得到了很多錯誤,如:模板專業化需要'template <>'或使用類模板'array'需要模板參數。你們能幫我糾正我的代碼或思維方式的錯誤嗎?我上課是這樣的:如何在C++中繼承模板類?
template <typename T>
class array {
public:
virtual void randomFunction() = 0;
protected:
T* values;
int size; // number of values
};
這裏intArray.h
class intArray: public array<int>{
public:
intArray();
void randomFunction();
private:
};
這裏intArray.cpp
intArray::intArray() {
this->size = 1;
this->values = new int[1];
}
void intArray::randomFunction() {
this->values[0] = 5;
}
我要的是迭代對這些對象,如:
int main() {
vector<array> arrayList;
arrayList.push_back(intArray());
arrayList.push_back(doubleArray());
arrayList.push_back(stringArray());
anotherFunction(&arrayList);
}
void anotherFunction(vector<array> *list) {
for(array a: (*list)) {
a.randomFunction();
}
}
你能解釋一下多一點?事情是我只是不知道值的類型「T *值」;所以我應該定義3個不同的類,它們是array_base,array和intArray? – Nick
'T *值'取決於您的模板參數。當你聲明'數組'時,它會在現場創建一個新的C++類。我會說'intArray'是多餘的。 –
StoryTeller
好的這裏是最後一個問題,將會有10個課程。所有的班級都有不同的大小和價值類型,例如: intArrayWithSizeOne,doubleArrayWithSizeFive,stringArrayWithSizeNine。我應該繼續使用相同的數據結構,因此我將定義10個類,數組和array_base。或者我應該將變量T *值更改爲void *值,然後在派生類中定義值?對不起愚蠢的問題。 – Nick