そのため、単純なベクトル テンプレートを作成するように依頼されました。教科書 (Savitch) の一般化されたリストの例をいくつか見て、クラスを正しく作成したと思います。今main()
、ユーザーにデータ型を選択させることで、クラスを呼び出そうとしています。identifier を宣言した後、問題が発生していますlist1
。if文でデータ型を切り替えた後、同じ識別子を使えるようにしたい。list1
ただし、既に宣言されているため、if ステートメントの本文の構文は正しいとは思いません。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];
}