Функции открытия, закрытия, удаления файлов и примеры работы с ними

в методе

29.*Понятие объектно-ориентированного программирования. Класс, объект, свойство, метод. Конструктор, деструктор.

Объе́ктно-ориенти́рованное, или объектное, программирование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.

Класс

Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Объект

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Различаются чистые и гибридные объектно-ориентированные языки. Чистые — это те, которые позволяют использовать только одну модель программирования — объектно-ориентированную. Вы можете объявлять классы и методы, но не можете завести глобальные переменные и обычные функции и процедуры старого типа.

Среди наших четырех языков, только Java и C# являются чистыми ОО языками (как Eiffel и Smalltalk). На первый взгляд это кажется положительной идеей. Однако она ведет к тому, что вы используете кучу статических методов и статических данных, что не так уж отличается от использования глобальных функций и данных, за исключением более сложного синтаксиса. По моему мнению, чистые ОО языки дают преимущество новичкам в ООП, потому что программист вынужден использовать (и учить) модель ООП. C++ и Object Pascal, наоборот, - типичные примеры гибридных языков, которые позволяют программистам использовать при необходимости традиционный подход C или Pascal.

уществует 3 класса языков, так или иначе связанных с объектами:

· Объектно-ориентированные

· Объектные

· Объектно-базированные

Объектно-ориентированные языки в полной мере поддерживают парадигму ООП, а именно, инкапсуляцию, наследование и полиморфизм. Типичными представителями таких языков являются C++, Java, C#.

К объектным языкам относят языки как минимум поддерживающие инкапсуляцию. Они позволяют создавать пользовательские объекты, но, обычно не поддерживают наследование или полиморфизм, или же поддерживают, но не в полной мере. Типичными представителем объектных языков являются Visual Basic до шестой версии включительно и Ada.

30. *Функции потокового ввода-вывода.

fwrite/fread используется для работы с бинарными файлами. Эти методы записывают не преобразованную инфу. в файл, ну и читает тоже соответственно.И эти методы записывают/читают инфу. порциями по размеру указанных байт.

 fprintf/fscanf для работы с обычными файлами. Перед записью инфа преобразуется в строку и записывается как обычная строка.

Потоковый ввод-вывод

 Библиотека потоков C++ предоставляет набор классов для управления вводом-выводом. Непосредственно в язык C++ (как и в язык Си) средства ввода-вывода не входят. В программах часто используется препроцессорная директива

#include <iostream.h>

Назначение указанного в директиве заголовочного файла — связать компилируемую программу с одной из основных частей библиотеки ввода-вывода, построенной на основе механизма классов. Эта библиотека почти стандартная, так как включена практически во все компиляторы C++. Однако о стандарте здесь можно говорить только неформально: библиотека создана после появления языка. Она разрабатывалась в некотором смысле независимо от создания языка, не входит в формальное описание языка и написана на языке C++.

Потоки ввода-вывода

Библиотека обеспечивает программиста механизмами для извлечения данных из потоков и для помещения данных в потоки. Каждый поток (за исключением строковых) ассоциируется при помощи операционной системы с определенным внешним устройством. При обмене с потоком используется вспомогательный участок памяти, называемый буфером потока. При вводе данных они сначала помещаются в буфер и только затем передаются выполняемой программе. При выводе — данные заполняют буфер перед передачей внешнему устройству. Заполнение и очистку буферов операционная система выполняет без явного участия программиста, поэтому поток в прикладной программе можно рассматривать как последовательность байтов, не зави­сящую от конкретных устройств, с которыми ведется обмен данными.

Все потоки библиотеки последовательные, т.е. в каждый момент для потока определены позиции записи и (или) чтения, которые после обмена перемещаются по потоку на длину переданной порции данных.

В зависимости от реализуемого направления передачи данных потоки делят на три группы:

· входные, из которых читается информация;

· выходные, в которые вводятся данные;

· двунаправленные, допускающие как чтение, так и запись.

В соответствии с особенностями обслуживаемого устройства потоки принято делить на следующие группы:

· стандартные, для передачи данных от клавиатуры и к дисплею (во всех предыдущих программах использовались потоки данной группы);

· файловые, при размещении данных на внешнем носителе (например, диск, магнитная лента);

· строковые, позволяющие размещать данные потока в памяти (символьный массив или строка) и пользоваться при этом всеми средствами, предоставляемыми библиотекой потоков (например, форматный ввод-вывод данных).

Классы потоков C++

Как сказано выше, библиотека ввода-вывода разработана средствами объектно-ориентированного программирования и является библиотекой классов. Основные преимущества такого подхода заключаются в следующем.

Во-первых, классам потоков доступен надежный механизм контроля типов передаваемых данных, основанный на перегрузке операций (что обеспечивает для каждого типа данных вызов соответствующей функции обработки). Таким образом, именно классами интерпретируются «сырые» последовательности байтов соответствующих потоков.

Во-вторых, классы потоков, благодаря полиморфизму, позволяют одним и тем же функциям работать с потоками различных типов, а библиотеке в целом — поддерживать единообразный интерфейс ввода-вывода. Например, интерфейс, используемый стандартным вводом-выводом, применим также к файловым и строко­вым потокам.

В-третьих, библиотека ввода-вывода расширяема. Это значит, что, с одной стороны, классы библиотеки могут работать с новыми типами данных, определенными программистом, используя упомянутый механизм перегрузки операций; а с другой — программист имеет возможность создавать собственные классы потоков на основе наследования свойств классов библиотеки.

Тем не менее, для прикладного программиста обычно достаточно лишь сведений о показанных на рисунке основных классах:

ios — базовый потоковый класс;

strstreambase — базовый класс строковых потоков;

fstreambase — базовый класс файловых потоков;

istream — класс входных потоков;

ostream — класс выходных потоков;

iostream — класс двунаправленных потоков ввода-вывода;

ifstream — класс входных файловых потоков;

ofstream — класс выходных файловых потоков;

fstream — класс двунаправленных файловых потоков;

istrstream — класс входных строковых потоков;

ostrstream — класс выходных строковых потоков;

strstream — класс двунаправленных строковых потоков.

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

Буферизация данных потоков реализована при помощи следующего механизма: класс ios, а следовательно, и производные классы содержат указатель на объект класса streambuf библиотеки — базового класса, обеспечивающего свои производные классы общими методами для буферизации данных. В свою очередь его производные классы (filebuf и strstreambuf) обеспечивают взаимодействие создаваемых потоков с физиче­скими устройствами. Данная параллельная иерархическая структура классов-буферов не показана на рисунке по причине достаточно редкой необходимости обращения к методам и данным класса streambuf напрямую из прикладных программ. Вместо этого чаще происходит опосредованное их использование вызовом методов классов — наследников ios.

Классы потоков, их данные и методы становятся видимыми и доступными в программе, если в нее включен соответствующий заголовочный файл:

iostream.h —для классов ios,istream, ostream, stream;

fstream.h —для классов fstreambase, ifstream, ofstream, fstream;

strstrea.h — для классов strstreambase, istrstream, ostrstream, strstream.

Поскольку класс ios является базовым для остальных потоковых классов, то включение в текст программы любого из заголовочных файлов fstream.h или strstrea.h автоматически подключает к программе и файл iostream.h. Соответствующие проверки выполняются на этапе препроцессорной обработки.

Стандартные объекты-потоки

При классификации потоков по типу обслуживаемого устройства в особую группу были выделены стандартные потоки для обмена с клавиатурой и дисплеем. Библиотека обслуживает стандартные потоки путем определения в заголовочном файле iostream.h четырех специальных объектов:

cin — объект класса istream, связанный со стандартным буферизованным входным потоком (обычно — клавиатура консоли);

cout — объект класса ostream, связанный со стандартным буферизованным выходным потоком (обычно — дисплей консоли);

сегг — объект класса ostream, связанный со стандартным небуферизованным выходным потоком (обычно — дисплей консоли), в который направляются сообщения об ошибках;

clog — объект класса ostream, связанный со стандартным буферизованным выходным потоком (обычно —дисплей консоли), в который с буферизацией направляются сообщения об ошибках.

Установленную по умолчанию связь стандартных потоков с клавиатурой и дисплеем (консолью) программист по своему усмотрению может разорвать, перенаправив ввод-вывод данных, например, в файловый поток. Это осуществляется простой операцией присваивания:

ifstream ifs;// Определение входного файлового потока

cin = ifs; // Переадресация ввода

Стандартные потоки в конкретных реализациях библиотеки на самом деле являются объектами некоторых производных классов, не показанных на приведенной схеме иерархии. Однако это не меняет существа дела (например, библиотека Borland C++ определяет их как объекты классов istream_withassign и ostream_withassign — производных от istream и ostream, соответственно, с перегруженными операциями присваивания для реализации возможности переадресации ввода-вывода).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: