Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ТП!!.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
459 Кб
Скачать
☆
  1. Шаблоны функций. Перегружаемые функции.

Перегрузка функции.

Перегрузка функции позволяет организовать работу функций с одним именем по-разному с возможным возвратом различных значений и передачей различных по типу и количеству фактических параметров. Сигнатура функции – это определение ее типа, имени и параметров. Для обеспечения перегрузки функции необходимо определить столько вариантов описания функции, сколько вариантов сигнатур необходимо при обращении к ней. При вызове функции компилятор проверяет согласование типов и подставляет нужную функцию из числа описанных (для этого в процессе компиляции для каждой функции составляется декор, который и используется для проверки согласования типов и подстановки нужной - @sum#qiqi, @sum#pcpc). Согласование типов по следующим правилам:

точное согласование типов;

простейшие преобразованные типы.

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

Если возвращаемое значение и сигнатура нескольких функций совпадает, то второе и последующие объявления трактуются как переопределение первого;

Если сигнатуры функций совпадают, возвращаемые значения различны, компилятор трактует как ошибку, потому что при вызове функции определяется, какая именно функция будет подставлена;

Подстановка осуществляется по типу передаваемых параметров и их количеству.

Шаблоны функций.

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

template <class T>

void swap (T*x, T*y)

{T z=*x;

x=y;

*y=z;}

Основные свойства параметров шаблона:

имена параметров шаблона должны быть уникальными во всем определении шаблона;

список параметров не может быть пустым;

если в списке параметров имеется несколько значений, то каждый из них должен быть определен через класс.

Параметрами шаблона являются различные типы передаваемых формальных параметров.

  1. Организация ввода-вывода.

В программах на С++ могут быть использованы две библиотеки для организации в/в.

Первая из них – это стандартная библиотека, заимствованная из TurboC – stdio.h.

Вторая – собственная библиотека в/в С++ позволяет организовать в/в данных через потоки iostream.h. Поток – это последовательность байт, которая с точки зрения программы не зависит от конкретных устройств, с которыми ведется обмен. Все потоки делятся на три типа:

входной поток, то есть поток, из которого читается информация;

выходной поток – поток, в который выводится информация;

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

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

Строковый поток – это набор или массив символов, передаваемый в основную память.

Файловый поток – набор данных, размещаемый на внешнем носителе.

Стандартный и консольный соответствуют передаче данных от клавиатуры к экрану дисплея или монитора.

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

Буфер ввода или вывода выгружается в следующих случаях:

принудительная выгрузка с помощью специальных операторов;

буфер полностью заполнен;

закрывается связанный с буфером поток.

программа успешно завершена, вызывается специальное прерывание, выгружающее буфер.

Использование буферизации позволяет повысить скорость передачи данных, так как передача данных большими порциями значительно снижает время в/в в целом за счет подготовки операторов. Функции в/в для потоков позволяют обрабатывать данные различных размеров и форматов. При этом может выполнятся как формализованный, так и неформализованный в/в. В/в потока позволяет:

открывать и закрывать потоки;

создавать и удалять временные потоки;

анализировать ошибки в/в потока и условие конца потока;

управлять буферизацией и размером буфера;

выгружать буфер, связанный с потоком;

получать и устанавливать указатель текущей позиции в потоке.

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