Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Либерти Джесс. Освой самостоятельно С++ за 21 день. - royallib.ru.rtf
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.55 Mб
Скачать

Упражнения

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

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

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

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

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

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

сlass xOutOfMemory

{

   public:

      xOutOfMemory(){ theMsg = new сhar[20];

         strcpy(theMsg, "trror in momory");}

      ~xOutOfMemory(){ delete [] theMsg;

         cout << "Memory restored, " << endl; }

      char * Message() { return theMsg; }

   private:

      char >> theMsg;

};

main()

{

   try

   {

      char * var = new char;

      if ( var == 0 )

      {

         xOutOfMemory * px = new xOutOfMemory;

         throw px;

      }

   }

   catch( xOutOfMemory * theException )

   {

      cout << theException->Message() <<endl;

      delete theException;

   }

   return 0;

}

6. Данный пример содержит потенциальную ошибку, подобную возникающей при попытке выделить память для показа сообщения об ошибке в случае обнаружения нехватки свободной памяти. Вы можете протестировать эту программу, изменив строку if (var == 0) на if (1), которая вызовет создание исключения.

День 21-й. Что дальше

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

Большая часть кода файлов источника представлена командами на языке C++. Компилятор превращает этот код в программу на машинном языке. Однако перед запуском компилятора запускается препроцессор, благодаря чему можно воспользоваться возможностями условной компиляции. Итак, сегодня вы узнаете:

• Что представляет собой условная компиляция и как с ней обращаться

• Как записывать макросы препроцессора

• Как использовать препроцессор для обнаружения ошибок

• Как управлять значениями отдельных битов и использовать их в качестве флагов

• Какие шаги следует предпринять для дальнейшего эффективного изучения C++

Процессор и компилятор

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

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