не допускается использование 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 и т.д.), можно возвращать указатели на объекты, если есть желание. При этом не забывайте своевременно освобождать память.