При выполнении любой программы бывают аварийные ситуации, вызванные самыми разнообразными причинами. Если мы делаем программу «для себя», то встроить в нее механизм обработки некоторых ошибок с выдачей соответствующих сообщений труда не представляет. Но в профессиональном программировании программы пишутся не для себя, а для других, поэтому такой метод обработки ошибок неприемлем.
При реализации класса строк (см. листинг 4.2) мы столкнулись как раз с такой ситуацией: одна из операций индексирования при неправильном параметре возвращала нулевой байт. Такое решение допустимо только для строк, так как в любой кодировке символ с нулевым кодом, как правило, входит в подмножество специальных символов. Для числовых массивов, очевидно, это решение не подходит — отсутствует специальное значение. Поэтому лучше просто не выполнять операцию, а сообщить о неверном параметре программе-клиенту.
Аналогичные проблемы возникают при реализации конструкторов. В классе TString (см. листинги 4.3-4.7) любой конструктор создавал пустую строку, если получал неправильные параметры. Для строк это решение можно было реализовать, так как в классе TSt г i ng определено поле-массив фиксированного размера. Однако создать «умный» массив, если неправильно задана длина, нельзя, поскольку память выделяется динамически. Поэтому конструктор «умного» массива (см. листинги 5.2-5.4) завершался аварийно. В профессиональном программировании такое поведение программы совершенно неприемлемо — об аварии требуется сообщить программе-клиенту.
В обычной функции-методе для этих целей можно использовать либо дополнительный параметр, либо возвращаемое значение. Однако перегруженная операция не может иметь лишних параметров, поэтому должна в таких случаях возвращать некоторое «аварийное» значение. У конструктора же, как и у перегружаемых операций, в отличие от обычных функций, нет и такой возможности.
Таким образом, необходим языковой механизм, с помощью которого методы и конструкторы класса могли бы сообщать программе-клиенту об аварийной ситуации. В стандарт С++ для этих целей включен механизм обработки исключений (см. п. 15 в [1]).
Опубликовал Kest
November 07 2013 14:37:21 ·
0 Комментариев ·
3215 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.