У меня есть домашняя работа, которая просит меня сделать следующее:
Создайте класс шаблонов с именем FlexArray, который предлагает гибкие индексы массивов. Пользователь класса может установить нижний индекс и верхний индекс при объявлении объекта.
Примеры кода пользователя:
FlexArray a (1,5); //Нижний индекс равен 1, а верхний индекс - 5 FlexArray b (-5, 10); // Нижний индекс - -5, а верхний индекс - 10
Предоставьте следующие функции для вашего класса:
- конструктор по умолчанию
- параметризованный конструктор, в котором пользователь указал нижний индекс и верхний индекс
- деструктор
- копировать конструктор
- оператор присваивания
- overloaded [] с аналогичной семантикой [], уже используемой со встроенными массивами.
Ошибки в условиях PRE могут обрабатываться с помощью утверждений или блоков try/catch. Размер массива не изменяется. Подписчики должны находиться в зоне действия.
Книга действительно не помогает создавать шаблоны. Я надеялся, что кто-то предоставит мне какое-то направление по этой проблеме и посмотрит, действительно ли мой код на правильном пути. Я попытался начать эту проблему с очень ограниченного объема книги и различных ресурсов в Интернете и получил:
#ifndef H_templates
#define H_templates
#include <iostream>
using namespace std;
template <typename T>
class FlexArray
{ public:
FlexArray(); // POST: empty FlexArray
FlexArray(LI,UI); // POST: Parameterized Constructor
~FlexArray(); // POST: destructor
CopyArr(Array* sourceArray, Array* destinationArray, size); // POST: Copies array
//Overloading the assignment operators to add arrays(?) Unsure if
// this is what is meant by the original question
FlexArray operator+
(const FlexArray& otherFlexArray) const;
//Overload the operator +
FlexArray operator-
(const FlexArray& otherFlexArray) const;
//Overload the operator -
FlexArray operator[]
(const FlexArray& otherFlexArray) const;
//Overload the operator []
private:
T FlexArray[size]; // Flex array
int size; // number of items Array
int LI; //Lower Index
int UI; //Upper Index
};
template <typename T>
FlexArray<T>::FlexArray ()
// POST: empty FlexArray
{ size = 0; }
template <typename T>
FlexArray<T>::~FlexArray()
// POST: destructor
{ }
template <typename T>
FlexArray<T>::CopyArr( Array* sourceArray, Array* destinationArray, size)
//Pre: Takes 3 arguments, the original array, the array to copy too, and, the size of array
// POST: Copies the array
{
for(int i=0; i<size; i++){
sourceArray[i] = destinationArray[i]
}
}
#endif