Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

Решение этой проблемы лежит в тщательном упорядочении обработчиков таким образом, чтобы самые специфические из них стояли в начале, а более общие следовали за ними. В данном примере для решения проблемы достаточно поменять местами два обработчика — xZero и xTooSmall.

Данные в классах исключений и присвоение имен объектам исключений

Часто для того, чтобы программа могла отреагировать

должным образом на ошибку, полезно знать несколько больше, чем просто тип возникшего исключения. Классы исключений — это такие же классы, как и любые другие. Вы абсолютно свободно можете добавлять любые данные в эти классы, инициализировать их с помощью конструктора и считывать их значения в любое время, как показано в листинге 20.4.

Листинг 20.4. возвращение данных из объекта исключения

1: #include <iostream.h>

2:

3: const int DefaultSize = 10;

4:

5: class Array

6: {

7: public:

8: // конструкторы

9: Array(int itsSize = DefaultSize);

10: Array(const Array &rhs);

11: ~Array { delete [] pType;}

12:

13: // операторы

14: Array& operator=(const Array&);

15: int& operator[](int offSet);

16: const int& operator[](int offSet) const;

17:

18: // методы доступа

19: int GetitsSize const { return itsSize; }

20:

21: // функция-друг

22: friend ostream& operator<< (ostream&, const Array&);

23:

24: // определение классов исключений

25: class xBoundary { };

26: class xSize

27: {

28: public:

29: xSize(int size):itsSize(size) { }

30: ~xSize{ }

31: int GetSize { return itsSize; }

32: private:

33: int itsSize;

34: };

35:

36: class xTooBig : public xSize

37: {

38: public:

39: xTooBig(int size):xSize(size){ }

40: };

41:

42: class xTooSmall : public xSize

43: {

44: public:

45: xTooSmall(int size):xSize(size){ }

46: };

47:

48: class xZero : public xTooSmall

49: {

50: public:

51: xZero(int size):xTooSmall(size){ }

52: };

53:

54: class xNegative : public xSize

55: {

56: public:

57: xNegative(int size):xSize(size){ }

58: };

59:

60: private:

61: int *pType;

62: int itsSize;

63: };

64:

65:

66: Array::Array(int size):

67: itsSize(size)

68: {

69: if (size == 0)

70: throw xZero(size);

71: if (size > 30000)

72: throw xTooBig(size);

73: if (size <1)

74: throw xNegative(size);

75: if (size < 10)

76: throw xTooSnall(size);

77:

78: pType = new int[size];

79: for (int i = 0; i<size; i++)

80: pType[i] = 0;

81: }

82:

83:

84: int& Array::operator[] (int offSet)

85: {

86: int size = GetitsSize;

87: if (offSet >= 0 && offSet < GetitsSize)

88: return pType[offSet];

89: throw xBoundary;

90: return pType[0];

91: }

92:

93: const int&Array::operator[] (int offSet) const

94: {

95: int size = GetitsSize;

96: if (offSet >= 0 && offSet < GetitsSize)

97: return pType[offSet];

98: throw xBoundary;

99: return pType[0];

100: }

101:

102: int main

103: {

104:

105: try

106: {

107: Array intArray(9);

108: for (int j = 0; j< 100; j++)

109: {

110: intArray[j] = j;

111: cout << "intArray[" << j << "] okay..." << endl;

112: }

113: }

114: catch (Array::xBoundary)

115: {

116: cout << "Unable to process your input!\n";

117: }

118: catch(Array::xZero theException)

119: {

120: cout << "You asked for an Array of zero objectsl " << endl;

121: cout << "Received " << theExesptiQn,GatSize << endl;

122: }

123: catch (Array:;xTooBig theException)

124: {

125: cout << "This Array is too big,,, " << endl;

126: cout << "Received " << theException,GetSize << endl;

127: }

128: catch (Array;:xTooSmall theException)

129: {

130: cout << "This Array is too small... " << endl;

131: cout << "Received " << theException.GetSize << endl;

132: }

133: catch (...)

134: {

135: cout << "Something went wrong, but I've no idea what!\n";

136: }

137: cout << "Done.\n";

138: return 0;

139: }

Результат:

Поделиться:
Популярные книги

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Неудержимый. Книга XX

Боярский Андрей
20. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XX

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Картошка есть? А если найду?

Дорничев Дмитрий
1. Моё пространственное убежище
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.50
рейтинг книги
Картошка есть? А если найду?

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Новый Рал 3

Северный Лис
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Новый Рал 3

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Я тебя не отпущу

Коваленко Марья Сергеевна
4. Оголенные чувства
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не отпущу

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Мама из другого мира. Дела семейные и не только

Рыжая Ехидна
4. Королевский приют имени графа Тадеуса Оберона
Любовные романы:
любовно-фантастические романы
9.34
рейтинг книги
Мама из другого мира. Дела семейные и не только