- •Курсовая работа
- •По дисциплине «Программирование 2» Тема: «Шаблоны и Обработка исключений»
- •Аннотация
- •Содержание
- •Введение
- •1. Теоретический раздел
- •Ошибки в шаблонах
- •Шаблоны классов
- •Использование шаблонов
- •Правила выведения аргументов шаблона функции
- •Общее понятие исключительной ситуации
- •Виды исключительных ситуаций
- •2. Проектный раздел
- •3. Заключение
- •4. Список использованных источников
Использование шаблонов
Для использования шаблона класса, необходимо указать его параметры:
List<int> li;
List<string> ls;
li.Add( 17 );
ls.Add( "Hello!" );
Правила выведения аргументов шаблона функции
Для параметров, которые являются типами (например, параметр T функции sort), возможно выведение, если аргумент функции имеет один из следующих типов:
Тип аргумента |
Описание |
T const T volatile T |
Сам тип T, возможно с модификаторами const или volatile. template< class T > T ReturnMe( const T arg ) { return arg; }
ReturnMe( 7 ); ReturnMe( 'a' ); |
T* T& T[A] A — константа |
Указатель, ссылка или массив элементов типа T. Примером может служить шаблон функции sort, рассмотренный выше |
Templ<T> Templ — имя шаблона класса |
В качестве аргумента функция требует конкретную специализацию некоторого шаблона. #include <vector>
template< class T > void sort( vector< T > array ) { /* сортировка */ }
vector<int> i; vector<char> c; sort( i ); sort( c ); |
T (*) (args) args — некие аргументы |
Указатель на функцию, которая возвращает тип T. template< class T > T* CreateArray( T(*GetValue)(), const int size ) { T *Array = new T[ size ]; for( int i = 0; i < size; i++ ) Array[i] = GetValue(); return Array; }
int GetZero() { return 0; } char InputChar() { char c; cin >> c; return c; }
int *ArrayOfZeros = CreateArray( GetZero, 20 ); char *String = CreateArray( InputChar, 40 ); |
type T::* T Class::* type — некий тип Class — некий класс |
Указатель на член класса T произвольного типа. Указатель на член типа T произвольного класса. class MyClass { public: int a; };
template< class T > T& IncrementIntegerElement( int T::* Element, T& Object ) { Object.*Element += 1; return Object; }
template< class T > T IncrementMyClassElement( T MyClass::* Element, MyClass& Object ) { Object.*Element += 1; return Object.*Element; }
MyClass Obj; int n;
n = ( IncrementIntegerElement( &MyClass::a, Obj ) ).a; n = IncrementMyClassElement( &MyClass::a, Obj ); |
type (T::*) (args) T (Class::*) (args) type — некий тип Class — некий класс args — некие аргументы |
Указатель на функцию-член класса T произвольного типа. Указатель на функцию-член типа T произвольного класса. class MyClass { public: int a; int IncrementA(); }; int MyClass::IncrementA() { return ++a; }
template< class T > T& CallIntFunction( int (T::* Function)(), T& Object ) { (Object.*Function)(); return Object; }
template< class T > T CallMyClassFunction( T (MyClass::* Function)(), MyClass& Object ) { return (Object.*Function)(); }
MyClass Obj; int n;
n = ( CallIntFunction( &MyClass::IncrementA, Obj ) ).a; n = CallMyClassFunction( &MyClass::IncrementA, Obj ); |
1.3 Обработка исключений в C++
Обрабо́тка исключи́тельных ситуа́ций — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».
