Voprosy_k_ekzamenu_po_informatike
.pdf41. ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ ПРЯМОГО ДОСТУПА К ДАННЫМ.
Для обеспечения произвольного (прямого) доступа используется внутренний указатель файла, который определяет текущий индекс обрабатываемого байта файла, и две пары функций:
seekg(). Устанавливает указатель в позицию с номером внутри файла для чтения. Примеры:
in.seekg(4); in.seekg(4, in.end);
seekp(). Устанавливает указатель в позицию с номером внутри файла для записи.
out.seekp(4); out.seekp(4, out.end);
tellg(). Возвращает текущую позицию указателя потока ввода.
streampos n = in.tellg();
tellp(). Возвращает текущую позицию маркера потока вывода.
streampos n = out.tellp();
Константы позиционирования:
Значение |
Перемещение указателя |
|
|
ios_base::beg |
От начала |
|
|
ios_base::cur |
С текущей позиции |
|
|
ios_base::end |
С конца |
|
|
71
42. ШАБЛОНЫ ФУНКЦИЙ, ОПРЕДЕЛЕНИЕ И НАЗНАЧЕНИЕ.
Шаблоны — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию). Шаблоны позволяют создавать параметризованные классы и функции. Параметром может быть любой тип или значение одного из допустимых типов (целое число, enum, указатель на любой объект с глобально доступным именем, ссылка)
Объявление и определение шаблонов в С++. Так выглядит шаблон функции определения минимума:
template <typename T> T min(T a, T b) { return a < b ? a : b;
}
template – используется для обозначения функции-шаблона. typename T – определяет параметр, который будет хранить информацию о том, какой именно тип данных был передан в шаблон. T – возвращаемое значение, min – название, (T a, T b) – аргументы, а далее идет тело функции.
Для вызова этой функции можно просто использовать её имя:
min( 1, 2 ); min( 'a', 'b' );
min( string( "abc" ), string( "cde" ) );
Назначение шаблонов. Механизм шаблонов позволяет автоматизировать подготовку переопределённых функций. При использовании шаблонов нет необходимости заранее определять все варианты функции с одним и тем же, но переопределённым именем, потому что компилятор сам, автоматически, будет анализировать вызовы функции в тексте программ и формировать необходимые определения функции для тех типов данных которые указаны в этом конкретном обращении.
Конкретизация. Процесс подстановки тип и значений вместо параметров называется конкретизация шаблона. При конкретизации шаблона вместо параметра типа поставляется фактический встроенный или определаный пользователем тип.
Имя параметров шаблона, скрывает объекты с аналогичным именем в глобально области видимости по отношению к шаблону видимости. Если в теле шаблона функции необходим доступ к таким внешним объектам с одинаковыми именами, нужна операция доступа к области видимости. Обязательным является включение всех параметров шаблона в список
72
определяемых шаблонной функцией, вне зависимости от того, как будет использоваться данный параметр.
Основные свойства параметров шаблона.
-Объект или тип объявленный внутри шаблонной функции, не могут иметь тот же самый тип что и какой-то из параметров.
-Имена параметров должны быть уникальными в о всем определении шаблона.
-Список параметров шаблона не должен быть пустым, иначе нет смысла его создавать.
-В списках параметров, если их несколько, перед каждым записывается ключевое слово class и разделяется ','.
-Нельзя к одному ключевому слову записать несколько индентификаторов.
-С помощью имён параметров шаблона могут описываться формальные параметры функции, тип возвращаемого значения и тип любых локальных величин шаблонной функции.
-Так же как и для простой функции, для шаблонной существует описание и определение.
73
43. ШАБЛОНЫ ФУНКЦИЙ, ОСОБЕННОСТИ ИХ ИСПОЛЬЗОВАНИЯ.
Шаблоны — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию). Шаблоны позволяют создавать параметризованные классы и функции. Параметром может быть любой тип или значение одного из допустимых типов (целое число, enum, указатель на любой объект с глобально доступным именем, ссылка)
Особенности использования. Шаблоны часто используются в случаях дублирования одного и того же кода для нескольких типов. Например, можно использовать шаблоны функций для создания набора функций, которые применяют один и тот же алгоритм к различным типам данных. Шаблоны не предусматривают сокращение объемов оперативной памяти, занимаемой программой, они только делают листинг программы короче.
Пример программы для нахождения наибольшего элемента в паре.
#include <iostream> using namespace std;
template <class T>
T GetMax (T a, T b) { T result;
result = (a>b)? a : b; return (result);
}
int main () {
int i=5, j=6, k; long l=10, m=5, n; k=GetMax<int>(i,j); n=GetMax<long>(l,m); cout << k << endl; cout << n << endl; return 0;
}
74