Я только начинаю использовать шаблоны и шаблоны классов в университете, и, честно говоря, меня это немного смущает.
Мне нужно создать класс Vector (пользовательский класс, а не std :: вектор), который может принимать массив объектов и обрабатывать операции с этим массивом, а также автоматически увеличивать размер массива на * 2, который вы можете увидеть в моем методе addData в Vector. Класс My Registration создает массив Vector (класс), беря входные данные из файла, передавая их в Results, чтобы они считывали данные из файла по мере необходимости.
Мой класс Vector предназначен для установки данных. от регистрации в результатах и увеличения размера массива при необходимости. Как мне сделать операторы ввода и вывода в моем классе Vector, чтобы сделать это, подобно тому, как я сделал это для своего класса Registration, так как он использует ввод файла?
Vector.h:
#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
#include <string>
#include <sstream>
template <class T>
class Vector
{
public:
Vector(int arraysize1): arraysize(arraysize1), data(new T[arraysize1]){};
Vector<T> *addData(T dataToAdd){
Vector<T> *temp = new Vector<T> (this->arraysize);
temp->data = this->data;
Vector<T> *newData = new Vector<T> (this->arraysize*2);
for (int x = 0; this->arraysize; x++){
if(x < this->arraysize){
newData->setData(temp->getData()[x],x);
}
else
newData->setData(dataToAdd, x);
}
return newData;
};
void initArray(){
for(int x = 0; x<this->arraysize; x++){
this->setData(x ,x);
}
};
void printArray(){
std::ostringstream oss;
for (int i = 0; i < this->arraysize; ++i){
oss << this->data[i] + " ";
}
};
T* getData(){
return this->data;
};
int getSize(){
return this->arraysize;
}
void setData(T data, int index){
this->getData()[index] = data;
}
private:
int arraysize;
T* data;
};
#endif // VECTOR_H
Registration.h (класс, который создает массив 'results', который является другим классом). Так мой массив объектов был объявлен ранее в моем заголовочном файле. , и теперь я должен использовать свой векторный класс, чтобы изменить объявление:
Vector<Result> results;
Регистрация. cpp:
Здесь я использую перегрузку входного потока и оператора osteam для чтения из файла , Теперь, когда я использую свой векторный класс для Результатов, какой синтаксис мне нужно изменить?
void Registration::readFile(istream &input){
long studentid1;
unsigned semester1;
input >> studentid1 >> semester1 >> count;
input.ignore(100, '\n');
SetStudentID(studentid1);
SetSemester(semester1);
for(unsigned i = 0; i < count; i++)
input >> results[i];
}
void Registration::writeFile(ostream & os) const{
os << "Student ID: " << GetStudentID() << '\n'
<< "Semester: " << GetSemester() << '\n';
for(unsigned i = 0; i < count; i++)
os << results[i] << '\n';
}
Если нужен мой класс Result и какие-либо другие детали, дайте мне знать.