шаблон класса для обработки динамических c массивов объектов - C ++ - PullRequest
0 голосов
/ 28 апреля 2020

Я только начинаю использовать шаблоны и шаблоны классов в университете, и, честно говоря, меня это немного смущает.

Мне нужно создать класс 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 и какие-либо другие детали, дайте мне знать.

...