- •Курсовая работа
- •По дисциплине «Программирование 2» Тема: «Шаблоны и Обработка исключений»
- •Аннотация
- •Содержание
- •Введение
- •1. Теоретический раздел
- •Ошибки в шаблонах
- •Шаблоны классов
- •Использование шаблонов
- •Правила выведения аргументов шаблона функции
- •Общее понятие исключительной ситуации
- •Виды исключительных ситуаций
- •2. Проектный раздел
- •3. Заключение
- •4. Список использованных источников
1. Теоретический раздел
Разработать алгоритм работы с динамической структурой данных – однонаправленный список в котором будут показаны принцип работы с шаблонами и обработчиком исключений.
Шаблоны — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию).
В C++ возможно создание шаблонов функций и классов.
Шаблоны позволяют создавать параметризованные классы и функции. Параметром может быть любой тип или значение одного из допустимых типов (целое число, enum, указатель на любой объект с глобально доступным именем, ссылка).
(Ниже представлен пример использования шаблона)
Для описания алгоритмов этих основных операций используется следующее объявление:
template< typename T >
void sort( T array[], int size ); // прототип: шаблон sort объявлен, но не определён
template< typename T >
void sort( T array[], int size ) // объявление и определение
{
T t;
for (int i = 0; i < size - 1; i++)
{
for (int j = size - 1; j > i; j--)
{
if (array[j] < array[j-1])
{
t = array[j];
array[j] = array[j-1];
array[j-1] = t;
}
}
}
}
template< int BufferSize > // целочисленный параметр
char* read()
{
char *Buffer = new char[ BufferSize ];
/* считывание данных */
return Buffer;
}
Шаблон функции начинается с ключевого слова template, за которым в угловых скобках следует список параметров. Затем следует объявление функции.
Простейшим примером служит определение минимума из двух величин.
Если a меньше b то вернуть а, иначе — вернуть b
В отсутствие шаблонов программисту приходится писать отдельные функции для каждого используемого типа данных. Хотя многие языки программирования определяют встроенную функцию минимума для элементарных типов (таких как целые и вещественные числа), такая функция может понадобиться и для сложных (например «время» или «строка») и очень сложных («игрок» в онлайн-игре) объектов.
Так выглядит шаблон функции определения минимума:
template< typename T >
T min( T a, T b )
{
return a < b ? a : b;
}
Ошибки в шаблонах
Некоторые ошибки в описании шаблона могут быть выявлены уже в месте описания. Эти ошибки не зависят от конкретных параметров. Например:
template< class T >
void f( T data )
{
T *pt = 7; // ошибка: инициализация указателя целым числом
datA = 0; // ошибка: неизвестный идентификатор datA
*pt = data // ошибка: нет точки с запятой
}
Шаблоны классов
В классе, реализующем связный список целых чисел, алгоритмы добавления нового элемента списка, поиска нужного элемента не зависят от того, что элементы списка — целые числа. Те же алгоритмы применялись бы и для списка символов, строк, дат, классов игроков, и так далее.
template< class T >
class List
{
/* ... */
public:
void Add( const T& Element );
bool Find( const T& Element );
/* ... */
};
