Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Упражнения

ОГЛАВЛЕНИЕ

9.9 Упражнения

 1. (*2) Обобщите класс STC до шаблона типа, который позволяет хранить и устанавливать функции разных типов.
 2. (*3) Дополните класс CheckedPtrToT из $$7.10 до шаблона типа, в котором особые ситуации сигнализируют о динамических ошибках.
 3. (*3) Напишите функцию find для поиска в бинарном дереве узлов по значению поля типа char*. Если найден узел с полем, имеющим значение "hello", она должна возвращать указатель на него. Для обозначения неудачного поиска используйте особую ситуацию.
 4. (*1) Определите класс Int, совпадающий во всем со встроенным типом int за исключением того, что вместо переполнения или потери значимости в этом классе запускаются особые ситуации.

Подсказка: см. $$9.3.2.
 5. (*2) Перенесите из стандартного интерфейса С в вашу операционную систему основные операции с файлами: открытие, закрытие, чтение и запись. Реализуйте их как функции на С++ с тем же назначением, что и функций на С, но в случае ошибок запускайте особые ситуации.
 6. (*1) Напишите полное определение шаблона типа Vector с особыми ситуациями Range и Size. Подсказка: см. $$9.3.
 7. (*1) Напишите цикл для вычисления суммы элементов вектора, определенного в упражнении 6, причем не проверяйте размер вектора.

Почему это плохое решение?
 8. (*2.5) Допустим класс Exception используется как базовый для всех классов, задающих особые ситуации. Каков должен быть его вид? Какая от него могла быть польза? Какие неудобства может вызвать требование обязательного использования этого класса?
 9. (*2) Напишите класс или шаблон типа, который поможет реализовать обратный вызов.
 10. (*2) Напишите класс Lock (замок) для какой-нибудь системы, допускающей параллельное выполнение.
 11. (*1) Пусть определена функция
         int main() { /* ... */ }
Измените ее так, чтобы в ней перехватывались все особые ситуации, преобразовывались в сообщения об ошибке и вызов abort().

Подсказка: в функции fromC() из $$9.8 учтены не все случаи.