Другие языки программирования и технологии

Задача - описать класс "Массив" с параметрами: длина массива, указатель на первый элемент массива

Вообще предстоит решить задачу на рациональные числа с помощью класса "Массив". С классом "рац числа" проблем не возникло, единственное, не могу никак понять: что от меня требуется сделать в классе "массив"??? мне нужно реализовать массив длины n? каким образом? использовать связный список?
Я понимаю задачу так. Сделать упрощенный вариант std::vector.

Что такое параметры класса - автору задачи виднее. Но под "указателем на первый элемент массива" я все же склонен понимать указатель, к которому применима адресная арифметика и который можно использовать как буфер памяти (аналог std::vector::data() в C++11 или &v[0] при годе Стандарта < 11), т. е. нужен сплошной блок памяти для внутреннего хранения.

PS. И советую там от греха такое, чтоб не возиться:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
Сильно упростит код, особенно если требования к базовому типу данных (YouRealNumber или что там у Вас) сложные.
Проще запретить копирование, чем возиться с in-place конструкторами Вашего базового типа, про это новички вообще не знают. Вариант Павла Мудреца - один из самых сложных. Запретите копирование и не думайте о нем больше.
Петрас Транкаускас
Петрас Транкаускас
19 662
Лучший ответ
>С классом "рац числа" проблем не возникло
Фигасе.. . То есть НОД и автоматическое сокращение, математические операции, представление в виде правильной и неправильной дроби - все уже готово? А вот массив - проблема?

Динамические массивы организовываются по-разному в зависимости от конкретного языка. Связный список - это вариант, но это медленно. Обычно просто выделяется в куче нужное количество памяти под указатели на объекты и все. Дополнительно надо описать методы добавления, удаления по индексу и т. д..
КА
Кыял Аманов
57 103
ну не совсем. В связном списке, каждый элемент знает кто его потомок и больше ничего. Массив же просто ячейки памяти к которым можно обратится по смещению от первого элемента. Т. е это должен быть такой класс:
1. преобращение по имени долже возвращаться 0 элемент
2. при вызове по индексу должен возвращатся елемент из ячейки 0+index*размер данных
3. должны обрабатыватся всякие ислючения, вроде лезем за границы массива
Собственно в данном случае ничего сложного делать не нужно. При создании массива - выделять память и все, при уничтожение - освобождать. Реализовать операторы квадратных скобок и прочие.

class MyArray {
public:
MyArray(int size);
MyArray(MyArray& src);
~MyArray();
T operator[](int index);
};

Также лучше реализовать шаблон по типу и счетчик использования данных.

Похожие вопросы