![]() |
|
Программирование >> Расширенная версия языка c++
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 указывать не обязательно. Можно перехватывать
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |