Программирование >>  Дополнительные возможности наследования 

1 ... 258 259 260 [ 261 ] 262 263 264 265


47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

void MyFunctionO;

unsigned int FunctionTwoO;

void FunctionThree(unsigned int ♦);

int mainO {

MyFunctionO;

Чтобы использовать только один оператор catch, примените для этого виртуальные функции, catch (Exceptions theException) {

theException. PrintErrorO;

return 0;

unsigned int * FunctionTwoO {

unsigned int mylnt = new unsigned int; if (mylnt == 0)

throw OutOfMemoryO; return mylnt;

void MyFunctionO {

unsigned int *mylnt = FunctionTwoO;

FunctionThree(mylnt);

cout << Ok. mylnt: << *mylnt;

delete mylnt;

void FunctionThree(unsigned int *ptr) {

long testNumber; cout Enter an int; ; cin testNumber;

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

проверок, чтобы выявить неверные данные, введенные пользователем if (testNumber > 3768 testNumber < 0)

throw RangeError(testNumber); ptr = testNumber;



ffinclude 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 xOutOfMemoryO;

catch( xOutOfMemory& theException ) {

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

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

День 21

КоишроАьные вопросы

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

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

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



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

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

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

4. Что делает оператор дополнения до единицы? Инвертирует значение каждого бита переменной.

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

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

6. Какова разница между операторами & и &&? Оператор & - это побитовое И, а && - это логическое И.

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

Оператор - это побитовое ИЛИ, а 11 - это логическое ИЛИ.

Упражнения

1. Создайте защиту от повторного включения файла заголовка STRING.Н.

Sifndef STRING H Sdefine STRING H

endif

2. Напишите макрос assertO, который

будет печатать сообщение об ошибке, а также имя файла и номер строки, если уровень отладки равен 2;

будет печатать сообщение (без имени файла и номера строки), если уровень отладки равен 1;

не будет ничего делать, если уровень отладки равен 0.

ftinclude <iostream.h>

ftifndef DEBUG ftdefine ASSERT(x) ftelif DEBUG == 1 ftdefine ASSERT(x) \

if (! (x))\

cout ERROR!! Assert #x failed\n ; \

10; }



1 ... 258 259 260 [ 261 ] 262 263 264 265

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