е), поскольку оно изменяет спе

Автор admin Понедельник, 4 мая 2009 11:32

е), поскольку оно изменяет спецификацию исключений Base::f(). Спецификация Derived::g() допустима, потому что DerivedException является частным случаем BaseException (а не наоборот). Base/ Derived и BaseException/DerivedException можно рассматривать как параллельные иерархии классов; в контексте Derived ссылки на BaseException в спецификациях исключений и возвращаемых значениях могут заменяться на DerivedException. Такое поведение называется ковариантным (оба набора классов одновременно изменяются при перемещении по соответствующим иерархиям). Как было показано в первом томе, типы параметров не ковариантны — вы не можете изменять сигнатуры переопределенных виртуальных функций. Когда спецификации исключений не используются Просматривая объявления функций в стандартной библиотеке С++, вы не обнаружите в ней ни одной спецификации исключений! Хотя это может показаться странным, на самом деле такая внешняя небрежность объясняется вескими причинами: библиотека состоит в основном из шаблонов, а ее автору неизвестно, как будут работать конкретные типы или функции. Допустим, вы создаете обобщенный шаблон стека и


Комментарии закрыты.