не допускается использование public полей данных в классах

Для выделения памяти использовать оператор new, для освобождения – delete

В классах, где это необходимо, реализовать конструктор копирования и оператор присваивания, даже если текст задачи прямо этого не требует

не допускается использование public полей данных в классах

- не допускается использование friend функций и классов (за исключением реализации операторов << и >>)

 

1. Реализовать алгоритм сортировки с применением объектно-ориентированного подхода. Реализовать классы «динамический массив» и «элемент массива». Один алгоритм сортировки из [Шелла, Пирамидальная, Слияния, Быстрая] реализовать в виде метода класса «массив». Метод сортировки должен оперировать объектами класса «элемент массива», а не непосредственно переменными, которые сортируются. Для этого требуется реализовать операторы сравнения для класса «элемент массива». В классе «массив» реализовать метод проверки упорядоченности массива. Продемонстрировать работоспособность реализации.

 

2. Не пользуясь шаблонами библиотеки STL реализовать классы-шаблоны «вектор» и «матрица». Класс «матрица» должен быть реализован с использованием класса «вектор». Класс «вектор» должен содержать оператор индексации, позволяющий модифицировать элемент вектора. В классе «матрица» реализовать операторы:

- присваивания

- сложения двух матриц

- индексации (с проверкой корректности индексов)

- вывода матрицы на экран

 

3. Реализовать простой так называемый data access layer. В виде классов должны быть реализованы следующие сущности:

- адрес (имеется в виду почтовый адрес)

- человек (должен быть обязательный атрибут ‘домашний адрес’, хранящийся в виде указателя на объект класса ‘адрес’)

- предприятие (должны быть обязательные атрибуты: адрес, хранящийся в виде указателя на объект класса ‘адрес’, и список сотрудников, хранящийся в виде массива указателей на объекты класса ‘человек’)

В каждый из этих классов добавьте по 2 или более дополнительных атрибута (на ваше усмотрение). Там, где предполагаются массивы, рекомендуется использовать контейнеры STL (list, vector и т.п.).

В каждом из этих классов реализуйте статический метод для создания объекта соответствующего класса путем ввода значений всех его свойств с клавиатуры. Например, для класса ‘предприятие’ данный метод может выглядеть так:

static Company Company::createFromInput();

Данный метод должен возвращать объект соответствующего класса со всеми инициализированными свойствами.

Для описанных трех классов реализовать сохранение и загрузку из файлов. Это может быть реализовано статическими методами вида:

static Company Company::readFromFile(FILE*);

void Company::writeToFile(FILE*);

Вместо FILE* можно использовать std::fstream. Такая пара методов должна быть в каждом из трех классов. Возможно, проще всего хранить все объекты одного класса в одном файле, т.е. все адреса вместе, всех людей – в другом файле, а предприятия в третьем. Можете реализовать другую схему.

И, наконец, главный класс, который предоставляет доступ к манипулированию данными. Допустим, он называется DataAccessLayer. Он должен позволять получить всю имеющуюся информацию о предприятиях, их сотрудниках и адресах, а также добавлять новые предприятия с сотрудниками и адресами. Соответствующие методы могут выглядеть так:

static vector<Company> DataAccessLayer::getCompanies();

static void DataAccessLayer::addCompany();

Первый метод должен открыть файлы, создать объекты с помощью метода readFromFile, и вернуть их в контейнере. Ну и закрыть файлы, конечно.

Второй метод должен создать новый объект ‘предприятие’ с помощью метода createFromInput и сохранить его в файл (т.е. добавить все записи в соответствующие файлы) с помощью метода writeToFile.

Последнее замечание: в методах, которые возвращают объекты (например, createFromInput, getCompanies и т.д.), можно возвращать указатели на объекты, если есть желание. При этом не забывайте своевременно освобождать память.