- •Билет № 3
- •Базовые конструкции структурного программирования
- •Процессы в Windows
- •Билет № 6
- •Объектно-ориентированное программирование
- •Простое наследование
- •Критические секции
- •Void InitializeCriticalSection(lpcritical_section lpCriticalSection); // вход в критическую секцию
- •Задача. Произвести инверсию (перестановка наоборот) массива
- •Билет № 9
- •События
- •Задача. Отсортировать массив методом выбора минимального элемента.
- •Билет № 12
- •Абстрактные классы
- •Void Print(void) /* аспект виртуальной функции*/
- •Void Print(void) /* аспект виртуальной функции*/
- •Исключения и их обработчики
- •Задача. Ввести с клавиатуры два вещественных числа и определить наибольшее из них.
- •Билет № 15
- •Назначение операционной системы
- •Резервирование, распределение и освобождение виртуальной памяти
- •Int *a; // указатель на массив целых чисел
- •Задача. Ввести целое число и определить, сколько в нем цифр.
Void Print(void) /* аспект виртуальной функции*/
{ printf("Число = %5d\n",num); }
};
class Tstrpole:public Tpole // класс Строка
{
private: char str[10];
public :
Tstrpole(char *st) { strcpy(str,st); }
Void Print(void) /* аспект виртуальной функции*/
{ printf("Строка = %s\n",str); }
};
void main()
{
setlocale(0,"russian"); int n,i; char st[80];
Tpole *a[10]; // массив указателей на объекты класса Tpole
for(i=0;i<10;i++)
{
printf("\nВведите целое число или строку: ");
scanf_s("%s",st,80);
if ((n=atoi(st))!=0||(strlen(st)==1 && st[0]=='0'))
a[i]=new Tnumpole(n); // Число
else
a[i]=new Tstrpole(st); // Строка
}
for(i=0;i<10;i++) a[i]->Print();
for(i=0;i<10;i++) delete a[i];
_getch();
}
Исключения и их обработчики
Исключением называется событие, которое произошло во время выполнения программы, в результате совершения которого дальнейшее нормальное выполнение программы становится невозможным. Как правило, такие события являются ошибками в программе. Поэтому для дальнейшей работы приложения требуется или восстановление программы в рабочее состояние, или ее аварийное завершение с освобождением всех захваченных программой ресурсов.
В операционных системах Windows для этой цели предназначен механизм структурной обработки исключений (structured exception handling, SEH). Смысл механизма структурной обработки исключений заключается в следующем. В программе выделяется блок программного кода, в котором может произойти исключение. Такой блок кода называется фреймом, а сам код называется охраняемым кодом. Затем, после фрейма вставляется программный блок, который обрабатывает происшедшее исключение. Этот блок называется обработчиком исключения. После обработки исключения управление передается первой инструкции, следующей за обработчиком исключения.
Очевидно, что для того чтобы использовать этот механизм в программе, в язык программирования C++ нужно ввести новые ключевые слова. Такими ключевыми словами являются try и except, которые расширяют список стандартных ключевых слов языка программирования C++ и различаются только компилятором фирмы Microsoft. Ключевое слово try отмечает
фрейм, а ключевое слово except отмечает обработчик исключения. В результате фрагмент программы, который использует механизм структурной обработки исключений, выглядит следующим образом:
{
// охраняемый код
}
except (выражение-фильтр)
{
// код обработки исключения
}
Обработка исключения
# include <windows.h>
#include <iostream.h>
{
int а = 10;
int *р = NULL; // пустой указатель на целое число
—tin/
{
cout « "а = " « *р « endl; // ошибка, так как р = NULL
}
except(EXCEPTION_EXECUTE_HANDLER)
{
cout « "There was some exception." « endl;
p = &a;
}
cout « "a = " « *p « endl; // нормально
return 0;
}
Задача. Ввести с клавиатуры два вещественных числа и определить наибольшее из них.
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
float A, B, Max;
printf("Enter the A and B: ");
scanf ( "%f%f", &A, &B );
if ( A > B )
{
Max = A;
}
else
{
Max = B;
}
printf ( "The largest %f",
Max );
return 0;
}
