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

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

Жанры

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

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

Шрифт:

9. Что означает оператор catch(...)?

Оператор catch(...) будет перехватывать все исключения любого типа.

10. Что такое точка останова?

Это позиция в коде, в которой отладчик остановит выполнение программы.

Упражнения 

 1. Запишите блок try и оператор catch для отслеживания и обработки простого исключения.

#include <iostream.h>

class OutOfMemory {};

int main

{

try

{

int *myInt = new int;

if (myInt == 0)

throw OutOfMemory;

}

catch (OutOfMemory)

{

cout << "Unable to allocate memory!\n";

}

return 0;

}

2. Добавьте

в исключение, полученное в упражнении 1, переменную-член и метод доступа и используйте их в блоке оператора catch.

#include <iostream.h>

#include <stdio.h>

#include <string.h>

class OutOfMemory;

{

public:

OutOfMemory(char *):

char>> GetString { return itsString; }

private:

char>> itsString;

};

OutOfMemory::OutOfMemory(char * theType)

{

itsString = new char[80];

char warning[] = "Out Of Memory! Can't allocate room for: ";

strncpy(itsString, warning,60);

strncat(itsString,theType,19);

}

int main

{

try

{

int *myInt = new int;

if (myInt == 0)

throw OutOfMemory("int");

}

catch (OutOfMemory& t:heException)

{

cout << theException.GetString;

}

return 0;

}

3. Унаследуйте новое исключение от исключения, полученного в упражнении 2. Измените блок оператора catch таким образом, чтобы в нем происходила обработка как производного, так и базового исключений.

1: #include <iostream.h>

2:

3: // Абстрактный тип исключений

4: class Exception

5: {

6: public:

7: Exception{}

8: virtual ~Exceptiori{}

9: virtual void PrintError = 0;

10: };

11:

12: // Производный класс для обработки проблем памяти

13: // Обратите внимание: в этом классе не производится выделение памяти

14: class OutOfMemory : public Exception

15: {

16: public:

17: OutOfMemory{}

18: ~OutOfMemory{}

19: virtual void PrintError;

20: private:

21: };

22:

23: void OutOfMemory::PrintError

24: {

25: cout << "Нет

памяти !!\n";

26: }

27:

28: // Производный класс для обработки ввода неверных чисел

29: class RangeError : public Exception

30: {

31: public:

32: RangeError(unsigned long number){badNumber = number:}

33: ~RangeError{}

34: virtual void PrintError;

35: virtual unsigned long GetNumber { return badNumber; }

36: virtual void SetNumber( unsigned long number) {badNumber = number;}

37: private:

38: unsigned long badNumber;

39: };

40:

41: void RangeError::PrintError

42: {

43: cout << "Number out of range. You used " << GetNumber << "N\n";

44: }

45:

46: void MyFunction; // прототип функции

47:

48: int main

49: {

50: try

51: {

52: MyFunction;

53: }

54: // Чтобы использовать только один оператор catch,

55: // примените для этого виртуальные функции

56: catch (Exceptions theException)

57: {

58: theException.PrintError;

59: }

60: return 0;

61: }

62:

63: void MyFunction

64: {

65: unsigned int *myInt = new unsigned int;

66: long testNumber;

67: if (myInt == 0)

68: throw 0ut0fMemory;

69: cout << "Enter an int: ";

70: cin >> testNumber;

71: // эту проверку лучше заменить серией

72: // проверок, чтобы выявить неверные данные, введенные пользователем

73: if (testNumber > 3768 || testNumber < 0)

74: throw RangeError(testNumber);

75:

76: *mylnt = testNumber;

77: cout << "Ok. myInt: " << *myInt;

78: delete myInt;

79: }

4. Измените код из упражнения 3, чтобы получить трехуровневый вызов функции.

1: #include <iostream.h>

2:

3: // Абстрактный тип исключений

4: class Exception

5: {

6: public:;

7: Exception{ }

8: virtual ~Exception{}

9: virtual void PrintError = 0;

10: };

11:

12: // Производный класс для обработки проблем памяти

13: // Обратите внимание: в этом классе не производится выделение памяти!

14: class OutOfMemory : public Exception

15: {

16: public:

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

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Локки 6. Потомок бога

Решетов Евгений Валерьевич
6. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 6. Потомок бога

Кодекс Охотника. Книга XXIX

Винокуров Юрий
29. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXIX

Купец из будущего

Чайка Дмитрий
1. Третий Рим
Фантастика:
попаданцы
5.25
рейтинг книги
Купец из будущего

Законы Рода. Том 8

Андрей Мельник
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6

Неправильный диверсант Забабашкин

Арх Максим
4. Неправильный солдат Забабашкин
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Неправильный диверсант Забабашкин

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

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

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

Искатель 3

Шиленко Сергей
3. Валинор
Фантастика:
попаданцы
рпг
фэнтези
5.00
рейтинг книги
Искатель 3

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Время собирать камни

Распопов Дмитрий Викторович
4. Связь без брака
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Время собирать камни