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

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

Жанры

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

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

Шрифт:

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";

44: }

45:

46: //

прототипы функций

47: void MyFunction;

46: unsigned int * FunctionTwo;

49: void FunctionThree(unsigned int *);

50:

51: int main

52: {

53: try

54: {

55: MyFunction;

56: }

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

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

59: catch (Exception& theException)

60: {

61: theException.PrintError;

62: }

63: return 0;

64: }

65:

66: unsigned int >> FunctionTwo

67: {

68: unsigned int <<royInt = new unsigned int;

69: if (myInt == 0)

70: throw OutOfMemory;

71: return myInt;

72: }

73:

74: void MyFunction

75: {

76: unsigned int *myInt = FunctionTwo{ };

77:

78: FunctionThree(myInt);

79: cout << "0k. myInt: " << *myInt;

80: delete myInt;

81: }

82:

83: void FunctionThree(unsigned int *ptr)

84: {

85: long testNumber;

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

87: cin >> testNumber;

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

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

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

91: throw RangeError(testNumber);

92: *ptr = testNumber;

93: }

5. Жучки: что неправильно в следуюшем коде?

#include "string.h" // класс строк

class xOutOfMemory

{

public:

xOutOfMemory( const String& where ) : location( where ){ }

~xOutOfMemory{ }

virtual String where{ return location };

private:

String location;

}

main

{

try

{

char *var = new char;

if ( var == 0 )

throw xOutOfMemory;

}

catch( xOutOfMemory& theException )

{

cout << "Out of memory at " << theException.location << "\n";

}

}

В

процессе обработки ситуации нехватки памяти конструктором класса xOutOfMemory в области свободной памяти создается объект типа string. Это исключение может возникнуть только в том случае, когда программе не хватает памяти, поэтому попытка нового выделения памяти будет тем более неудачной.

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

День 21

 Контрольные вопросы

1. Для чего нужны средства зашиты от повторного включения?

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

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

На разных компиляторах эта операция выполняется по-разному. Внимательно ознакомьтесь с документацией компилятора.

3. Каковаразница между директивами #define debug 0 и #undef debug?

Директива #define debug 0 определяет лексему debug и присваивает ей 0 (нуль). Поэтому везде, где встретится лексема debug, она будет заменена символом 0. Директива #undef debug удаляет любое определение лексемы debug, в результате чего любой экземпляр лексемы debug, обнаруженный в файле, будет оставаться неизменным.

4. Что делает оператор дополнения до единицы?

Инвертирует значение каждого бита переменной.

5. Чем отличается оператор побитового ИЛИ от оператора исключающего побитового ИЛИ?

Оператор побитового ИЛИ возвращает значение TRUE (ИСТИНА), если установлен один из битов (или оба сразу). Оператор исключающего ИЛИ возвращает TRUE только в том случае, если данный бит установлен лишь в одном операнде, но не в обоих сразу.

6. Какова разница между операторами & и &&?

Оператор & — это побитовое И, а && — это логическое И.

7. Какова разница между операторами | и || ?

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

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

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

Меллер Юлия Викторовна
4. Боярышня
Фантастика:
альтернативная история
фэнтези
5.00
рейтинг книги
Боярышня Евдокия 4

Светлая. Книга 2

Рут Наташа
2. Песни древа
Фантастика:
постапокалипсис
рпг
фэнтези
5.00
рейтинг книги
Светлая. Книга 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Полковник Гуров. Компиляция (сборник)

Макеев Алексей Викторович
Полковник Гуров
Детективы:
криминальные детективы
шпионские детективы
полицейские детективы
боевики
крутой детектив
5.00
рейтинг книги
Полковник Гуров. Компиляция (сборник)

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Сумеречный стрелок 6

Карелин Сергей Витальевич
6. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 6

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2

(Не)зачёт, Дарья Сергеевна!

Рам Янка
8. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
(Не)зачёт, Дарья Сергеевна!

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Дважды одаренный. Том II

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Дорогами алхимии

Видум Инди
2. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Дорогами алхимии

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8