Методы шаблона класса, как мне взять объекты вместо целых чисел? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть собственный класс Vector, который я хочу использовать для динамических c массивов объектов. Я думаю, что у меня есть логика c, стоящая за ним, несколько правильная, так как этот код предназначен для обработки числовых значений любого типа, но как я смогу создавать массивы объектов? Я также перегружаю оператор [], чтобы увеличить размер массива на * 2, если индекс выходит за пределы. Было бы полезно получить некоторые отзывы о том, как я могу передать массивы объектов, а также обо всем, что мне, возможно, понадобится изменить. 1009 *, который считывает объекты, использующие этот шаблон, и каким будет тип параметра для моей функции?

Vector.h:

#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
#include <sstream>
#include <string>

template<class T>
class Vector {
public:
    Vector();
    T& operator[](int index);
    void addData(int val);
    int size();

private:
    T* data;
    int arraysize;
    int nextIndex;
};

Vector<T> Vector() {
    data = new T[10];
    for(int x = 0; x < 10; x++) data[x] = 0;
    arraysize = 0;
    nextIndex = 0;
}

T& Vector<T> operator[](int index) {
    T* newData;
    if(index >= arraysize) {
        newData = new T[index * 2];
        for(int x = 0; x < nextIndex; x++) newData[x] = data[x];
        for(int j = nextIndex; j < index * 2; j++) newData[j] = 0;
        arraysize = index * 2;
        delete[] data;
        data = newData;
    }
    if(index > nextIndex) nextIndex = index + 1;
    return *(data + index);
}

void add(T val) {
    T* newArray;
    if(nextIndex == arraysize) {
        arraysize = arraysize * 2;
        newArray = new T[arraysize];
        for(int x = 0; x < nextIndex; x++) {
            newArray[x] = data[x];

            for(int y = nextIndex; y < arraysize; y++) newArray[y] = 0;

            delete[] data;
            data = newArray;
        }
        data[nextIndex++] = val;
    }
}

int size() {
    return arraysize;
}

void printArray() {
    std::ostringstream oss;

    for(int i = 0; i < this->arraysize; ++i) {
        oss << this->data[i] + " ";
    }
}

T* getData() {
    return this->data;
}

void setData(T data, int index) {
    this->getData()[index] = data;
}

#endif // VECTOR_H
...