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

Использование шаблонов

Для использования шаблона класса, необходимо указать его параметры:

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++

Обрабо́тка исключи́тельных ситуа́ций — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».

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