Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Экзамен.docx
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
115.82 Кб
Скачать

33. Конструкторы файловых потоков. Ввод-вывод в файлы.

Файловые потоки представляются классами ofstream и ifstream, являющиеся потоком вывода и ввода соответственно, причем запись в файл – это вывод данных (ofstream), а записть данных из файла в память – ввод (ifstream).

В соответствии с именем класса, создание объекта – потока – происходит посредством вызова одноименного конструктора.

ofstream fout (“output_file.txt”); //создан поток для вывода данных в файл

ifstream fout(“input_file.txt”); //создан поток для записи данных из файла

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

ifstream fin(“text.txt”,ios::in);

Возможные значения для ios:: представлены ниже:

in – для чтения;

out – для записи;

ate – начало вывода устанавливается в конец файла, допускает изменение позиции вывода;

app – открытие файла длоя добавления в конец (безотносительно к операциям позиционирования);

trunс – отрыть, удалить содержимое файла;

binary – двоичный режим операций.

Для выполнения операции позиционирования следует использовать метод seekg:

fin.seekg(0,ios::end);//тут 0 – это параметр, указывающий, на сколько

//позиций необходимо сместить позицию ввода относительно второго

//параметра – позиции.

Второй параметр может иметь следующие значения:

ios :: beg – начало файла;

ios :: cur – текущая позиция в файле (current);

ios :: end – запись от конца файла.

Для закрытия файла используют метод fclose():

fout.close();

Для получения текущей позиции в файле используют следующие методы:

- входной файловый поток: tellg();

- выходной файловый поток: tellp().

Для проверки конца файла используют ios::eof.

34 Параметризированные типы и функции

template <class T> class V

Объявление функции

extern int strlen(const *char);

Описание встраиваемых функций

inline charget() {return *p++};

Объявление данных

extern int a;

Описание констант

const float pi = 3.1415;

Перечисление

enum bool {false, true};

Объявление имен

class Matrix;

Директивы включения

#include <signal.h>

Определение макросов

#define caase break; case

Комментарии

/* */

35 Шаблоны функций. Параметры шаблонов. Шаблоны классов

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

Шаблон функции представляет собой обобщенное определение функции, из которого компилятор автоматически создает представитель функции для заданного пользователем типа (или типов) данных. Когда компилятор создает по шаблону функции конкретную ее реализацию, то говорят, что он создал порожденную функцию. Синтаксис объявления шаблона функции имеет следующий вид:

template < class T_1|T_1      идент_1>, . . . , <class Tn |Tn      идент_n > возвр_тип имя_функции (список параметров) // Заголовок функции

{

… // Тело функции }

За ключевым словом template следуют один или несколько параметров, заключенных в угловые скобки, разделенные между собой запятыми. Каждый параметр является либо ключевым словом class, за которым следует имя типа, либо именем типа, за которым следует идентификатор.

Для задания параметризованных типов данных вместо ключевого слова class может также использоваться ключевое слово typename. Параметры шаблона, следующие за ключевыми словами class или typename, называют параметризованными типами. Они информируют компилятор о том, что некоторый (пока что неизвестный) тип данных используется в шаблоне в качестве параметра (в момент вызова шаблона на место такого параметризованного типа станет тип, заданный программистом). Параметры шаблона, состоящие из имени типа и следующего за ним имени идентификатора, информируют компилятор о том, что параметром шаблона является константа указанного типа. Шаблонную функцию можно вызывать как обычную, никакого специального синтаксиса не требуется.

Процесс построения порожденной функции компилятором называют конкретизацией шаблонной функции.

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

  • программа содержит полный код для всех порожденных представителей шаблонного класса или функций;

  • не для всех типов данных предусмотренная реализация класса или функции оптимальна.

Преодоление второго недостатка возможно с помощью специализации шаблонов.