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