0% нашли этот документ полезным (0 голосов)
2 просмотров29 страниц

CPP 5

Документ описывает технологию объектно-ориентированного программирования (ООП) с акцентом на обработку исключительных ситуаций в C++. Рассматриваются синтаксис, генерация и обработка исключений, а также стандартные исключения и работа с файловыми потоками. Также упоминаются контейнерные классы, такие как vector и map, и их основные функции.

Загружено:

e102.gamma
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
2 просмотров29 страниц

CPP 5

Документ описывает технологию объектно-ориентированного программирования (ООП) с акцентом на обработку исключительных ситуаций в C++. Рассматриваются синтаксис, генерация и обработка исключений, а также стандартные исключения и работа с файловыми потоками. Также упоминаются контейнерные классы, такие как vector и map, и их основные функции.

Загружено:

e102.gamma
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

Технология ООП

Санкт-Петербургский государственный политехнический университет

4 октября 2011

Технология ООП
Обработка исключительных ситуаций

При обработке рассматриваются только ситуации внутреннего


характера (нет памяти в области heap, не найден файл,
переполнение и т.д.). Ситуация созданная нажатием Ctrl-C
считается внешней.

Технология ООП
Обработка исключительных ситуаций

Синтаксис исключений:
try {
...
}

Обозначает контролируемый блок кода.

Технология ООП
Обработка исключительных ситуаций

Генерация исключений:
throw [ выражение ] ;

Технология ООП
Обработка исключительных ситуаций

Обработка исключений:
catch ( тип имя ) { /∗ тело обработчика ∗/ }
catch ( тип ) { /∗ тело обработчика ∗/ }
catch ( . . . ) { /∗ тело обработчика ∗/ }

Технология ООП
Обработка исключительных ситуаций

Обработка исключений:
catch ( i n t i ) { // i n t }
catch ( const char ∗ ) { // c o n s t c h a r ∗ }
catch ( O v e r f l o w ) { // к л а с с O v e r f l o w }
catch ( . . . ) { /∗ обработка в с е х исключений ∗/ }

Технология ООП
Обработка исключительных ситуаций

После обработки исключения управление передается первому


оператору находящемуся за блоком исключений. Туда же,
минуя код всех обработчиков, передается управление, если
исключение в try-блоке не было сгенерировано.

Технология ООП
Обработка исключительных ситуаций

При генерации исключения в C++ происходят следующие


действия:
создается копия параметра throw в виде объекта, который
существует до тех пор, пока исключение не будет
обработано;
вызываются деструкторы объектов выходящих из области
дейстия;
передается объект и управление обработчику имеющему
совместимый тип с этим объектом.

Технология ООП
Обработка исключительных ситуаций

При генерации исключений:


создается копия параметра throw в виде объекта, который
существует до тех пор, пока исключение не будет
обработано;
вызываются деструкторы объектов выходящих из области
дейстия;
передается объект и управление обработчику имеющему
совместимый тип с этим объектом.

Технология ООП
Обработка исключительных ситуаций

Обработчик считается найденым, если:


тип объекта в обработчеке тот же, что и указан после
throw, т.е. T, const T, T& или const T&, где T — тип
исключения;
является производным от указанного в параметре catch,
если наследования производилось с ключем public;
является указателем который может быть преобразован к
нужному типу, например void* .

Технология ООП
Обработка исключительных ситуаций

Если происходит вызов непредусмотренного исключения, то


вызывается функция unexpected(), реализацию которой можно
заменить при помощи set_unexpected(), если такой функции
нету, то вызывается функция terminate(), реализацию которой
можно заменить при помощи set_terminate(), если такой
функции нету то происходит вызов функции abort().

Технология ООП
Обработка исключительных ситуаций

Типы исключений которые может генерировать функция,


перечисляются после ключевого слова throw после прототипа
функции.
v o i d f 1 ( ) throw ( i n t , const char ∗ ) { /∗ может
генерировать только типов i n t или c h a r ∗ ∗/ }
v o i d f 2 ( ) throw ( Oops ∗ ) { /∗ исключения типа
у к а з а т е л ь на к л а с с ∗/ }

Технология ООП
Обработка исключительных ситуаций

v o i d f 1 ( ) throw ( )
{
// Тело функции , не порождающей исключений
}

Технология ООП
Обработка исключительных ситуаций

При переопределении виртуальной функции можно задавать


список исключений такой же или более ограниченный чем в
базовом классе.
Если функция вызывает не описанное исключение, выывается
функция unexpected().

Технология ООП
Исключения в конструкторах и деструкторах

class Vector {
public :
class Size {};
enum {max = 3 2 0 0 0 } ;
Vector ( int n)
{ i f ( n<0 | | n > max ) throw S i z e ( ) ; }
};

try {
V e c t o r ∗p = new V e c t o r ( i ) ;
...
}
catch ( V e c t o r : : S i z e ) { // Обработка ошибки размера
вектора }

Технология ООП
Исключения в конструкторах и деструкторах

Если в конструкторе генерируется исключение то


автоматически вызываются деструкторы для полностью
созданных в этом блоке объектов. Например, если исключение
было вызвано при создании массива объектов, то деструкторы
будут вызваны только для успешно созданных элементов. Если
память выделяется динамически с помощью операции new и в
конструкторе возникает исключение, память из-под объекта
корректно освобождается.

Технология ООП
Стандартные исключения

bad_alloc
bad_cast
bad_typeid
bad_exception

Технология ООП
Стандартная библиотека С++

Файловые потоки:
ifstream — входной файловый поток
ofstream — выходной файловый поток
fstream — двунаправленный

Технология ООП
Файловые потоки

char b u f [ 1 0 0 ] ;
i f s t r e a m f f f (" f i l e . txt" , i o s : : in | i o s : : nocreate ) ;
if (! f f f )
c o u t << " e r r " ;
while ( ! f f f . eof () )
f f f . g e t l i n e ( buf , 1 0 0 ) ;

Технология ООП
Стандартная библиотека С++

Строковые потоки:
istringstream — входные строковые потоки;
ostringstream — выходные строковые потоки;
stringstream — двунаправленные строковые потоки.

Технология ООП
Файловые потоки

#i n c l u d e <s s t r e a m >
o s t r i n g s t r e a m os ;
time_t t ;
t i m e (& t ) ;
o s << "␣time : ␣" << c t i m e (& t ) ;

Технология ООП
Потоки и типы определенные пользователем

f r i e n d o s t r e a m& o p e r a t o r << ( o s t r e a m& out , MyClass&


C)
{ r e t u r n o u t << "␣x␣=␣" << C . x << "␣y␣" << C . y ; }

f r i e n d i s t r e a m& o p e r a t o r >> ( i s t r e a m& i n , MyClass&


C)
{ c o u t << " Enter ␣x : ␣" ; i n >> C . x ;
c o u t << " Enter ␣y : ␣" ; i n >> C . y ;
return in ;
}

Технология ООП
std::string

Класс string входит в стандартную библиотеку C++.


s t r i n g s 1 ( "Text" ) ;
s t r i n g s2 ;

char ∗ s t r = "Txt" ;
s t r i n g s3 ( s t r ) ;

Технология ООП
std::string

Функции:
s . at (1) ;
s 1 . append ( s 2 ) ; // +
s 1 . append ( s2 , 3 , 5 ) ;
s1 . i n s e r t (1 , st r 2 , 3 , 5) ;
s1 . r e p l a c e (1 , 2 , s t r 2 , 5) ;
s 1 . swap ( s 2 ) ;
s 1 . c _ s t r ( ) ; // возвращает c o n s t c h a r ∗
s 1 . f i n d ( s 2 ) ; // возвращает позицию
s 1 . compare ( 1 , 2 , s2 , 1 , 2 ) ; // аналог s t r s t r

Технология ООП
Контейнерные классы

Последовательные контейнеры:
vector — структура, эффективно реализующая
произвольныей доступ к элементам, а также добавление в
конец и удаление из конца;
dequeue — структура, эффективно реализующая
произвольныей доступ к элементам, а также добавление в
оба конеца и удаление из обоих концов;
list — список, эффективно реализует вставку и удаление
элементов в произвольное место, но не имеет
произвольного доступа к своим элементам.

Технология ООП
std::vector

v e c t o r <i n t > v ;
v . push_back ( 5 ) ;
v . push_back ( 6 ) ;
v . push_back ( 7 ) ;
f o r ( v e c t o r <i n t > : : i t e r a t o r i = v . b e g i n ( ) ; i != v .
end ( ) ; i ++)
{ c o u t << ∗ i << "␣" ; }

Технология ООП
std::vector

Функции:
i n s e r t ( ) // в с т а в к а в произвольное место
e r a s e ( ) // удаление из произвольного места
at , [ ] // произвольный доступ к элементу

Технология ООП
std::vector

Ассоциативные контейнеры:
map — словарь
multimap — словарь с дубликатами

Технология ООП
std::map

map<i n t , i n t > maps ;


maps [ 1 0 0 ] = 1 ;
maps [ 2 0 0 ] = 3 ;

Технология ООП

Вам также может понравиться