Шаблоны классов. Создание шаблонов. Использование шаблонов класса
Динамические структуры данных.
типы динамических структур:
- линейные списки
- очереди
- стеки
- бинарные деревья
узел – элемент динамической структуры
class Node
{Type d;
Node *p};
Линейные списки.
однонаправленный список – ссылки (связь) только на следующие элементы
двусвязный список – ссылки (связь) на следующие и на предыдущие элементы
кольцевой список – последний элемент связан с первым
Операции над списками:
- начальное формирование (создание первого элемента)
- добавление элемента в конец списка
- чтение элемента с заданным ключом
- вставка элемента в заданное место списка (до или после элемента с заданным ключом)
- удаление элемента с заданным ключом
- упорядочивание списка по ключу
Шаблоны (параметризованные классы) – позволяют создавать семейства родственных классов, которые можно применять к любому типу данных и передавать этот тип в качестве параметра класса
template <параметр шаблона> определение класса
Правила описании шаблонов:
- локальные (вложенные в шаблон) классы не могут содержать шаблоны в качестве своих аргументов
- шаблоны классов могут содержать статические элементы, дружественные функции и классы
- шаблоны могут быть производными, как от шаблонов, так и от классов, и являться базовыми для них
- внутри шаблона нельзя определять дружественные шаблоны
имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)]
List <int> list1;
List <double> list2;
list1.add(2);
list2.print;
32)Общий механизм обработки исключений в С++. Генерация и перехват исключений. Список исключений функции.
Исключительная ситуация – это возникновение непредвиденного или аварийного события, которое может порождаться некорректным использованием аппаратуры.
Механизм исключений С++ предназначен для событий, которые происходят в результате работы самой программы.
Вычислительный процесс
обнаружение обработка
аварийной аварийной
ситуации ситуации
Механизм обработки исключений: Стек – область памяти, выделяемая системой для программы, в которой хранятся параметры, локальные переменные функций и адреса возврата в функцию
Стек вызова – последовательность вызванных, но еще не завершившихся функций
Раскручивание стека – процесс освобождения памяти из-под локальных переменных и возврата управления вызывающей функции
Синтаксис исключения:
try
{код, который может генерировать исключение}
throw [выражение];
catch (тип имя) {тело обработчика}
catch (тип) {тело обработчика}
catch (…) {тело обработчика}
Перехват исключений.
Действия библиотеки С++ в случае генерации исключения:
1)создается копия параметра throw в виде статического объекта, который существует до тех пор, пока исключение не обработано
2)в поисках подходящего обработчика раскручивается стек; вызываются деструкторы локальных объектов, выходящих из области
3)объект исключения передается обработчику, имеющему параметр, совместимый по типу
Обработчик считается найденным, если тип объекта указанного после throw:
- тот же, что и в catch
- является производным от указанного в catch
- является указателем, который может быть преобразован по стандартным правилам к указанным в catch
Список исключений:
void f1() throw(int, char*)
{тело функции}
void f2() throw()
{тело функции не порождающий исключений}
Исключения в конструкторах:
class Vector
{public:
const int max=200;
Vector(int n)
{if(n<0 || n>max) throw “invalide size”;
…}…};
try
{… Vector *p=new Vector(400);…}
catch(char*) {}
33)Пространства имен. Состав стандартной библиотеки С++.
Пространство имен (поименованные области) служат для логического группирования объявлений и ограничения доступа к ним.
namespace [имя_области] {/*объявления*/}
namespace demo
{int i=1; int k=0;
void func(int);
void func2(int) {/*…*/}}
void demo::func(int) {/*…*/}
demo::i=100;
demo::func2(10);
using demo::i; //после можно испольжовать напрямую
using namespace demo;
Стандартная библиотека С++:
- функции, макросы и константы, унаследованные из библиотеки Си.
- классы, шаблоны и другие средства С++
группы классов:
- потоковые (управление потоками данных между оперативной памятью и внешними устройствами)
- строковые (работа с символьными строками)
- контейнерные (реализуют наиболее распространенные структуры для хранения данных)
- итераторы (унифицированный доступ к элементам контейнерных и других классов)
- математические (эффективная обработка массивов с плавающей точкой и работа с комплексными числами)
Стандартная библиотека шаблонов – совокупность контейнерных классов и итераторов.
34)Потоковые классы стандартной библиотеки С++.
извлечение – извлечение данных из потока
помещение – вывод в поток
По направлению обмена:
- входные
- выходные
- двунаправленные
По виду устройств, с которыми работает поток:
- стандартные
- файловые
- строковые
Иерархия потоковых классов:
ios streambuf
istream ostream
iostream
Стандартные потоки.
istream cin; ввод (клавиатура)
ostream cout; вывод (экран)
ostream cerr; сообщения об ошибке
ostream clog; диагностическое сообщение
В классах istream и ostream определены операции извлечения из потока (<<) и помещение в поток (>>).
- числовые значения можно вводить в десятичной или шестнадцатеричной системе счисления
- вещественное число вводится с точкой или с порядком
- при вводе строк извлечение происходит до ближайшего пробела
- значение указателей выводится в шестнадцатеричной системе счисления
Методы обмена:
get – возвращает код извлеченного из потока символа
getline – считает из потока строку, плюс пробельные символы
read – считывает определенное количество байтов
seekg – устанавливает текущую позицию чтения
put – выводит в поток символ
write – записывает в поток необходимое количество байтов