Программирование >>  Элементы языков с и с++ 

1 ... 174 175 176 [ 177 ] 178 179 180 ... 200


) switch

) for

к++; } while

return; см. пояснение после листинга throw 1; } try

catch (ArithmeticException e} задаем тип исключений,

которые будут обрабатываться

kl[0]=k; для легкого преобразования int в String this->textBoxl->Text= CHCTeMHoe сообщение: + e->Message + Шаг цикла= + Convert::ToString(kl[0]};

} catch ) Buttonl click

private: System::Void button2 Click(System::Object sender. System: :EventArgs e)

this->Close(); )

Пояснение-Основные пояснения сделаны в тексте программы. А сейчас обратим внимание на два момента:

П как формировать try-блок, где находится оператор throw, который выдает исключение;

□ как избежать неприятностей преобразования числовых типов данных в строку при работе в режиме CLR, в котором мы создали приложение.

Что касается первого вопроса, то тут надо иметь в виду следующее: оператор throw кое-куда ставить нельзя, ибо он выбрасывает системе исключение не



Функции, выдающие исключения

в соответствии с моделью создания и обработки исключительных ситуаций, принятой в данной версии С++, компилятор предполагает, что исключения могут выдаваться только от выполнения оператора throw или от вызова функции. Функция будет выдавать исключения, если ее заголовок дополнен одной из следующих спецификаций:

П throw () - функция выдает пустое исключение (т. е. не выдает никакого исключения);

П throw (...) - функция выдает любое исключение, которое возникнет при ее вызове;

П throw (type) - функция выдает исключение заданного типа.

В листинге 13.4 приводится функция fi(), выдающая исключение, когда ее аргумент четное число. Результат работы представлен на рис. 13.5.

;тинг13.4

2008-Func-Excep native.cpp : Defines the entry point for the console application.

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

Что касается второго вопроса, то здесь правило такое: среда CLR - среда специфическая и работает со своими типами данных (с объектами), а не с теми, к которым мы привыкли (int, float, char и т. п.). Одними из объектов являются managed-массивы (array-типы) и их элементы. Объекты имеют метод ToString о, переводящий объект в строку символов. Числовому объекту легко присвоить просто обычное число, а объект уже можно перевести в строку и потом вывести эту строку.



C-.\WINDOWS\system32\cmd.exe

я продолжения нажмите любую клавишу .

Рис. 13.5. Функции, выдающие исключения

#include stdafx.h .

#include <stdlib.h>

void fKint i) throw (int) {

if(i%2 = 0) четное число (остаток от деления равен 0) throw 1;

void f2(int j) throw (...) {

fl(j);

} .

,1------------------------------

int tmain() {

for(int j=0; j < 10; j++) try

f2(j); )

catch (...)

{ .

printf( j=%d\n ,j);

) for . *

} -



1 ... 174 175 176 [ 177 ] 178 179 180 ... 200

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