所以我被要求写一个简单的向量模板,我相信我已经正确地写了这门课,看看我们教科书 (Savitch) 中的一些广义列表的例子。现在我试图main()
通过让用户选择数据类型来调用类。声明标识符后,我遇到了问题list1
。在使用 if 语句切换数据类型后,我希望能够使用相同的标识符。但是,我不认为我的 if 语句主体中的语法是正确的,因为list1
已经声明了。在java中,我一直认为在声明一个类之后你可以随时调用它的构造函数,但我不知道如何在C++中做到这一点。
#include <iostream>
using namespace std;
template <class T>
class SimpleVector {
public:
SimpleVector();
SimpleVector(int);
SimpleVector(const SimpleVector & copy);
~SimpleVector();
int size();
T getElementAt(int n);
T & operator[](int index);
private:
T * item;
int length;
};
int main() {
int dType;
int dataSize;
cout << "What type of data do you want to enter?\n(1 for integer, 2 for double and 3 for strings)" << endl;
cin >> dType;
cout << "How many data inputs? " << endl;
cin >> dataSize;
SimpleVector <int> list1; // if I dont declare then for loop doesn't recognize list as a declared variable.
if (dType == 0) {
SimpleVector <int> list1(dataSize);
}
else if (dType == 1) {
SimpleVector <double> list1(dataSize);
}
else {
SimpleVector <string> list1(dataSize);
}
cout << "Please enter the data:" << endl;
for (int i = 0; i < dataSize; i++) {
cin >> list1[i];
}
return 0;
}
template <class T> SimpleVector<T>::SimpleVector() {
item = NULL;
length = 0;
}
template <class T> SimpleVector<T>::SimpleVector(int s) {
length = s;
item = new T[length];
}
template <class T> SimpleVector<T>::SimpleVector(const SimpleVector & copy) {
int newSize = copy - > size();
item = new T[newSize];
for (int i = 0; i < newSize; i++)
item[i] = copy.item[i];
}
template <class T> SimpleVector<T>::~SimpleVector() {
delete[] item;
}
template <class T> int SimpleVector<T>::size() {
return length;
}
template <class T> T SimpleVector<T>::getElementAt(int n) {
return *(item + n);
}
template <class T> T & SimpleVector<T>::operator[](int index) {
return this->item[index];
}