Использование механизма дружественных функций позволяет упростить интерфейс между классами. Например, дружественная функция может получить доступ к внутренним и защищенным компонентам сразу нескольких классов. Тогда из этих классов можно убрать компонентные функции, предназначенные только для обеспечения доступа к «скрытым» компонентам. Поскольку ограничение доступа к дружественной функции не относится, работать она будет достаточно быстро, и написать ее не труднее, чем функцию доступа к обычной структуре С++.
В данном задании была поставлена задача реализовать класс Directory, содержащий название родительского каталога, количество файлов в каталоге, список файлов в каталоге. Помимо этих переменных, для корректной работы программы мной были добавлены переменные содержащие путь каталога и вес каталога в байтах.
Один элемент списка включает в себя информационную запись о файле, дату последнего изменения, признак выделения и признак удаления. Список файлов подразумевает информационную запись, содержащую поля:
- имя файла.
- Расширение.
- дата и время создания.
- атрибут «только чтение».
- атрибут «скрытый».
- атрибут «системный».
- размер файла на диске.
Как принято считать, для программы, работающие с каталогами необходима реализация добавления, удаления файлов каталога, именно это и было указано в задании. Помимо двух стандартных операций, указывается осуществить процесс поиска данных, а именно файлов каталога по следующим признакам:
- по имени.
- по расширению.
- по дате создания.
Основная задача программы, будет в осуществлении операции пересечения и объединения. При объединении новый каталог должен содержать без повторений все файлы, содержащиеся в обоих каталогах-операндах. При пересечении новый каталог должен состоять только из тех файлов, которые имеются в обоих каталогах-операндах.
Отличительной четой в задании, является реализация конкретного объекта Group (группа), содержащего список файлов, из объекта типа Directory. С помощью которого должна быть возможность выбирать группу файлов по признаку удаления, по атрибутам, по дате создания.
Для демонстрации работы с объектами требуется написать главную функцию. Объявление класса и реализация методов класса должны быть выполнены в отдельных файлах.
Программа должна демонстрировать использование всех функций и методов.
Программа должна загружать массивы из файла, сохранять изменения в файлах.
2.2 Реализация класса Directory
Для начала необходимо создать класс Directory, в состав которого войдут переменные содержащий название родительского каталога, количество файлов в каталоге, список файлов в каталоге, путь к каталогу и объём каталога в байтах. Для этого были созданы переменные string name_kot; int kol_file = 0; long int size_katalog = 0; string put_katalog; которые были добавлены в спецификаторе public: для дальнейшего использования вне класса, а именно в главной программе.
В качестве информационной записи выступает структура data_file, вследствие чего был выведен массив структур KATALOG[50] для заполнения данными пятьюдесятью файлами каталога. Листинг объявления структуры data_file и класса Directory приведён ниже.
struct data_file
{
string name; string tip; string data_sozd[6]; string data_izm;
bool atr_read; bool atr_skr; bool atr_sys; bool vibor; bool ydalenie;
long int razmer;
};
class Directory {
private: data_file KATALOG[50];
public:
string name_kot; int kol_file = 0; long int size_katalog = 0; string put_katalog;
bool zapoln(string put);
void vivod();
void dobavlenie();
string ydalenie();
void poisk();
void peresechenie(Directory peresech);
void obedinenie(Directory obedin);
void grupirirovYdal(Directory &group);
void vivodGroup();
void grupirirovAtre(Directory &group);
void grupirirovData(Directory &group);
};
Так как структура data_file KATALOG[50]; находится в приватном доступе класса Directory, то для обращения к этой структуре необходим конструктор или метод, для присвоения первоначальных значений переменным структуры KATALOG. В связи с тем, что пользователь при запуске программы указывает количество каталогов с которыми он будет работать конструктор в качестве заполнения данными не является обходимым. Листинг создания в главной программе объекта класса Directory представлен ниже:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.