Программирование >>  Расширенная версия языка c++ 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 227


336 - Самоучитель-.С++

dsl.push(l.l) ,* .:. .ч,~>,-........

ds2.push{2.2) ; . ,

dsl.push{3.3);

ds2.push(4.4); . .

dsl.push(5.5); ds2.push(6,6);

for(i=0; i<3; cou Из стек dsl.pop{) \n ;

for(i=0; i<3; i++) cout Из стека 2: ds2.pop() \n ;

return 0;

Как показано на примере класса stack (и предыдущего класса list), родовые

функции и классы обеспечивают мощный инструмент экономии времени

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

процедур для каждого типа данных, с которыми должен работать ваш алгоритм.

Класс-шаблон может иметь более одного родового типа данных. Просто объявите все необходимые для класса типы данных внутри спецификации template, перечислив их через запятую. Например, в следующем коротком примере создается класс с двумя родовыми типами данных:

Здесь в определении класса используется два родовых типа данных finclude <io.5tream>

using namespace std; i -

template <clas Зде1, clas e2> class myclass (

Typel i;

Type2 j; .

public:

myclass (Typel e2 b) ( i = a; j = b; } void ShowO { cout i j \n; } ); -

int main() {

inyclass<int, double> obl(i0, 0.23); myclas3<char, char *> ob2(X, Это проверка );

obl.showO; ол значений типа int и double

ob2.show(); вывод значений типа char и char *

После выполнения программы на экран выводится следующая информация:

i0 0.23

X Это проверка




1. Если этого еще не сделано, откомпилируйте и выполните два примера программ с родовыми классами. Попытайтесь объявлять списки и/или стеки для разных типов данных.

2. Создайте и продемонстрируйте родовой класс, реализующий очередь.

3. Создайте родовой класс input, который при вызове конструктора делает следующее:

выводит на экранстроку-приглашение,

получает данные от пользователя,

повторно выводит на экран строку-приглашение, если вводимые данные не соответствуют заданному диапазону.

Объекты типа input должны объявляться следующим образом:

input прхглашенив , И1ш .ааачвмяе, максэнаvesture)

Здесь риглашение ~ это сообщение, появляющееся на экране в качестве приглашения для ввода. Минимальное и максимальное допустимые значения задаются с помощью параметров мин значенне и макс значение соответственно. (Тип данных, вводим1х пользователем, будет тем же самым, что и тип значений мин знанение и макс значеше.)

11.3. Обработка , 1

исключительных ситуаций

C++ обеспечивает встроеннгй механизм обработки ошибок, называемый обработкой исключительных ситуаций (exception handling). Благодаря обработке исключительных ситуаций можно упростить управление и реакцию на ошибки во время вгполнения программ. Обработка исключительнгх ситуаций в C++ организуется с помощью трех ключевых слов; try, catch и throw. В самых общих словах, инструкции программы, во время выполнения которых вы хотите обеспечить обработку исключительных ситуаций, располагаются в блоке try. Если исключительная ситуация (т. е. ошибка) имеет место

внутри блока try, она возбуждается (ключевое слово throw), перехватывается

(ключевое слово catch) и обрабатывается. Ниже поясняется приведенное здесь общее описание.

В программе объявлено два типа объектов. В объекте оЫ используются целое и значение двойной точности. В объекте оЬ2 - символ и указатель на символ. В обоих случаях компилятор автоматически генерирует необходимые данные и функции в соответствии со способом создания объектов.



Как уже отмечалось, любая инструкция, которая возбуждает исключительную ситуацию, должна выполняться внутри блока try. (Функции, которые вызываются из блока также могут возбуждать исключительную ситуацию.) Пю-бая исключительная ситуация должна перехватхваться инструкцией catch, которая располагается непосредственно за блоком try, возбуждающем исключительную ситуацию. Далее представлена основная форма инструкций try и catch:

бло исклячиталхмой ситуаи

catch (typel arg) { у. ., . .i,;

/ / м ясключитвльной ситуация

catch {typ02arg) { .

If блох перехвата нт&льмок ситуации .-

catch (ЬурвЗагд) { i , с

блох ситуации

... .-

. гг л: if, с

,1. . .

блок перехвата исллшжительяой camyanfot .... .. . . - ........ : ..

Бло должен содержать ту часть вашей программы, в который вы хотите отслеживать ошибки. Это могут быть как несколько инструкций внутри одной функции, так и все инструкции внутри функции inainO (что естественно ведет к отслеживанию ошибок во всей программе).

После того как исключительная ситуация возбуждена, она перехватывается соответствующей этой конкретной исключительной ситуации инструкцией catch, которая ее обрабатывает. С блоком try может быть связано более одной инструкции catch. To, какая именно инструкция catch используется, зависит от типа исключительной ситуации. То есть, если тип данных, указанный в инструкции catch, соответствует типу исключительной ситуации,

выполняется данная инструкция catch. При этом все оставшиеся инструкции блока try игнорируются (т. е. сразу после того, как какая-то инструкция в блоке try вызвала появление исключительной ситуации, управление передается соответствующей инструкции catch, минуя оставшиеся инструкции блока try, - примеч. пер). Если исключительная ситуация перехвачена, аргумент arg получает ее значение. Если вам не нужен доступ к самой исключительной ситуации, можно в инструкции catch указать только ее тип type, аргумент arg указывать не обязательно. Можно перехватывать



1 ... 107 108 109 [ 110 ] 111 112 113 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика