Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.DOC
Скачиваний:
11
Добавлен:
03.05.2019
Размер:
618.5 Кб
Скачать

Работа №13. Перегрузка в прикладном классе операторов вставки и извлечения

Выполняя запись и чтение с помощью потоков ввода-вывода, удобно вместо относительно громоздких предложений с потоковыми функциями write() и read() использовать операторы вставки в поток (<<) и извлечения из потока (>>). Однако эти операторы C++, перегруженные для потоков, по умолчанию осуществляют преобразование числовых данных в символьные и наоборот. Для того, чтобы осуществлять запись и чтение числовых данных (что обычно и требуется в прикладных программах обработки результатов экспериментов или моделирования), необходимо перегрузить операторы вставки и извлечения применительно к составу прикладного класса.

Воспользуйтесь в качестве заготовки текстом предыдущей работы. Включите в состав вашего класса перегруженные операторы << и >>, объявив их дружественными операторными функциями.

В файле с исходным текстом программы определите содержимое перегруженных операторных функций. Каждая из них должна посредством функций write() и read() посылать в поток или извлекать из потока последовательно все члены вашего класса. Не забудьте, что в качестве аргументов этих функций указываются адреса пересылаемых данных, приведенные к типу char*, и их размер в байтах.

Как и в предыдущей работе, создайте в функции OnCreate() объект вашего класса с некоторым набором аргументов и второй, “пустой” объект. Создайте поток файлового вывода – объект класса ofstream, указав в аргументах конструктора новое имя файла. Перешлите содержимое объекта вашего класса в файл, используя оператор вставки в поток (<<). Закройте поток вывода.

Создайте поток файлового ввода – объект класса ifstream. С помощью операторы извлечения из потока (>>) прочитайте данные с диска в неинициализированный объект вашего класса. В функции OnPaint() выведите в окно изображения обоих объектов. Убедитесь в совпадении изображений.

Работа №14. Библиотечный класс string

Если в классе, помимо числовых данных, имеются указатели на символьные строки, то такой объект нельзя записать в файл, поскольку в файл следует записывать не указатели, а сами символьные строки. Для включения в объекты символьных строк неопределенной длины удобно воспользоваться классом string из библиотеки классов C++. Преобразуйте свой класс так, чтобы в объектах класса вместо указателей на символьные строки содержались сами строки в виде объектов класса string.

Воспользуйтесь в качестве заготовки текстом работы №10а (класс, позволяющий формировать сводный отчет по всем объектам). Подключите к программе заголовочный файл <cstring.h>.

Замените в определении вашего класса указатели на символьные строки (типа char*) переменными типа string. Измените соответственно определение конструктора. Передача переменных типа string в конструктор класса может осуществляться как по имени (тип параметра string) так и по ссылке (тип параметра string&).

Модифицируйте список параметров функции wsprintf(), формирующей строки отчета, чтобы она могла воспринимать данные типа string. Для извлечения из объекта типа string самой строки (типа char*) следует использовать функцию c_str() класса string.

Для облегчения отладки программы замените все русские слова, используемые в качестве данных класса, на английские. Заменить надо только члены-данные; комментарии, помещаемые в выводимые на экран строки, изменять не следует. Полезно также указать все числовые данные в шестнадцатеричной системе, чтобы их легче было найти в дампе создаваемого в дальнейшем файла.

Убедитесь, что программа по-прежнему выводит в окно сообщения сводный отчет по всем созданным объектам.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]