Разработка приложений на C++
  • Введение
  • Особенности разработки программ на С++
    • Указатель на функцию
    • Преобразование типов
    • Наследование
    • Виртуальные функции
    • Перегрузка операций
    • Функциональные объекты
    • Шаблоны
    • Пространства имён
    • Обработка исключительных ситуаций
    • Немного о компиляции и сборке
    • Рекоммендации по написанию кода
    • Новые возможности стандарта С++11
    • Терминология
  • Понятие структур данных
    • Массивы
    • Динамические структуры
  • Метапрограммирование
    • Шаблоны функций
    • Шаблоны классов
    • Специализация шаблонов
      • Пример: вычисление факториала
      • Пример: числа Фиббоначчи
    • Конфигурации шаблонных классов
  • Стандартная библиотека С++
    • Обзор стандартной библиотеки С++
    • Структура стандартной библиотеки С++
      • Концепции
    • Ввод-вывод данных
    • Примитивы, определённые в библиотеке STL
    • Итераторы
    • Контейнеры
      • Inplus: Как это работает
    • Алгоритмы
      • inplus: Как это работает
    • Примеры использования стандартной библиотеки С++
    • Стандартная библиотека С++/Вопросы
    • Стандартная библиотека С++/Примеры лабораторных работ
  • Разработка и использование библиотек программирования
    • Создание библиотек программирования
    • Использование динамических библиотек
    • Вопросы
    • Примеры лабораторных работ
  • Ответы на вопросы
Powered by GitBook
On this page
  1. Особенности разработки программ на С++

Обработка исключительных ситуаций

Обработка исключений это мощный инструмент написания безопасного кода.

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

Рассмотрим код, приведенный листинге exception_example.cpp.

exception_example.cpp
#include <exception>
#include <iostream>

int main(){
    int a, b, c;
    try{
        a = b / c;
    }
    catch(std::exception e){
        std::cerr << e.what();
    }
    return 0;
}

Он представляет собой безопасное деление целых чисел. В связи с тем, что переменные не инициализированы, делитель может равняться 0, что вызовет аварийное завершение программы.

Код, который может вызывать аварийное завершение приложения, помещается в блок try. В случае возникновения ошибки выполняется код в блоке catch. Переменная в круглых скобках блока catch содержит информацию об ошибке. Для каждого типа ошибки может быть объявлен свой блок catch. Стандартная библиотека С++ предлагает ряд типов исключений, которые объявлены в заголовочном файле exception. В частности, базовым классом для все исключений является std::exception.

Проверку деления на ноль в данном случае можно выполнить менее кардинальным способом (division_zero.cpp).

divizion_zero.cpp
#include <iostream>

int main(){
    int a, b, c;
    if(c != 0){
        a = b / c;
    }
    else{
        std::cerr << "division by zero";
    }
    return 0;
}

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

PreviousПространства имёнNextНемного о компиляции и сборке

Last updated 1 year ago