|
Программирование >> Структурное программирование
дружественные функции и дружественные классы, которые имеют особое право доступа к закрытым и защищенным элементам класса, указатель this, позволяющий объекту знать собственный адрес, динамическое распределение памяти, статические элементы класса для хранения и операций с данными, имеющими одну копию для всех объектов класса, примеры распространенных абстрактных типов данных (массивы, строки, очереди), классы контейнеры и итераторы. Упражнения главы предлагают студенту разработать класс счетов, связанных с хранением вкладов, и класс множества целых чисел. Глава 8, Перегрузка операций , является одной из самых интересных в нашем курсе по С-Ы-. Студентам этот материал действительно нравится. Они находят его прекрасно согласующимся с изложением абстрактных типов данных в главах 6 и 7. Перегрузка операций позволяет программисту указать компилятору, как применять существующие операции к объектам новых типов. C+-I- сам по себе знает, как применять операции только к объектам таких встроенных типов, как целые числа, числа с плавающей запятой и символы. Но, предположим, мы создали новый класс - строки. Что означает применительно к строкам знак плюс? Многие программисты используют плюс применительно к строкам для обозначения их сцепления. Из главы 8 программист узнает, как перегрузить знак плюс таким образом, чтобы при его написании в выражении между двумя строковыми объектами компилятор генерировал бы вызов функции-операции, которая сцепляла бы эти две строки. В главе рассматриваются основы перегрузки операций, ограничения при перегрузке операций, различия в перегрузке функций-элементов класса и функций, не являющихся элементами, перегрузка унарных и бинарных операций, преобразование типов. Особенностью главы является обстоятельное изучение ряда важных частных случаев, включая класс массивов, класс строк, класс дат, класс больших целых чисел и класс комплексных чисел (для двух последних классов в упражнениях приводится полный исходный текст). Математически подготовленный студент получит удовольствие, создавая в ходе упражнения класс полиномов. Глава 9, Наследование , посвящена одной из основополагающих особенностей объектно-ориентированных языков программирования. Наследование - это форма повторного использования кода, которая позволяет быстро и легко разрабатывать новые классы путем использования возможностей уже существующих классов и добавления к ним каких-то новых возможностей. В главе вводятся понятия базовых классов и производных классов, защищенных элементов, открытого, защищенного и закрытого наследования, прямых и косвенных базовых классов, рассматривается применение конструкторов и деструкторов в базовых и производных классах, методика программирования с использованием наследования. В главе сравниваются наследование (отношение является ... ) с композицией (отношение содержит ... ) и вводятся отношения типа использует ... и знает ... . Особенностью главы является изучение нескольких важных частных случаев. В частности, развернутый учебный пример реализует иерархию классов точка, круг, цилиндр. Глава завершается учебным примером множественного наследования - особенности развитого С++, позволяющей производному классу наследовать атрибуты и функции нескольких базовых классов. Упражнения предлагают студенту сравнить создание новых классов наследованием и композицией; расширить иерархии наследования, рассмотренные в главе; создать иерархию наследования четырехугольник, трапеция, параллелограмм, прямоугольник, квадрат; создать более общую иерархию двумерных и трехмерных форм. Глава 10, Виртуальные функции и полиморфизм , рассматривает другую фундаментальную особенность объектно-ориентированного программирования - полиморфное поведение. Когда много классов связаны наследованием с одним базовым классом, каждый объект производного класса может рассматриваться как объект базового класса. Это позволяет писать программы в общем виде независимо от специфики типов объектов производных классов. Новые типы объектов тоже могут обрабатываться той же самой программой, что способствует расширяемости систем. Полиморфизм позволяет заменить в программах сложную логику переключений структуры switch более простой линейной логикой. Например, экранный администратор в видео-игре может просто посылать сообщение нарисуй каждому объекту связного списка, который должен быть нарисован. А каждый объект знает, как себя нарисовать на экране. К программе без ее модификации может быть добавлен новый объект, если он тоже знает, как себя нарисовать. Такой стиль программирования типичен для реализации популярных сегодня графических интерфейсов пользователя. В главе рассматривается механизм достижения полиморфного поведения путем использования виртуальных функций. Глава проводит различие между абстрактными классами, объекты которых не могут быть созданы, и конкретными классами, которые используются для создания объектов. Абстрактные классы используются для предоставления интерфейса, который наследуется всеми классами иерархии. Особенностью главы являются два больших учебных примера полиморфизма: система расчета заработной платы и еще одна версия рассмотренной в главе 9 иерархии форм точка, круг, цилиндр. Упражнения главы предлагают студенту обсудить ряд концептуальных проблем и подходов, добавить абстрактные классы в иерархию форм, разработать эскиз графического пакета, изменить приведенный в главе класс служащих; причем все эти проекты выполняются с помощью виртуальных функций и полиморфного программирования. Глава 11, Потоки ввода-вывода в С-1-+ , содержит всестороннее рассмотрение нового объектно-ориентированного стиля ввода-вывода в С-Ы-. Глава обсуждает различные возможности ввода-вывода С-Ы-, включая вывод операцией поместить в поток, ввод операцией взять из потока, сохранение типов при вводе-выводе (хорошее усовершенствование по сравнению с С), форматированный ввод-вывод, неформатированный ввод-вывод (более эффективный), манипуляторы потока для управления основанием счисления потока (десятичное, восьмеричное или шестнадцатеричное), числами с плавающей запятой, управление шириной поля, манипуляторы определяемые пользователем, состояния формата потока, состояния ошибки потока, ввод-вывод объектов определяемого пользователем типа и связь выходных потоков со входными (чтобы гарантировать, что приглашение появится на экране перед пользователем действительно прежде, чем он должен будет вводить ответы). Обширный набор упражнений предлагает студенту написать различные программы, которые затрагивают фактически все возможности ввода-вывода, обсужденные в тексте. Глава 12, Шаблоны , обсуждает одно из наиболее современных добавлений к развивающемуся языку C+-I-. Шаблоны функций рассматривались ранее в главе 3. Глава 12 дает дополнительный пример шаблона функции. Шаблоны класса дают возможность программисту заимствовать наиболее существенное из абстрактных типов данных (например, стека, массива или очереди) и затем создавать с минимальным дополнительным программированием варианты этих АТД для более конкретных типов (например, очереди целых чисел int, очереди чисел с плавающей запятой float, очереди строк и т.д.)- По этой причине шаблоны классов часто называют параметризованными типами. Глава обсуждает использование типизированных и нетипизи-рованных параметров, а также взаимодействие между шаблонами и такими понятиями С++, как наследование, друзья и статические элементы. Упражнения предлагают студенту написать ряд шаблонов функций и классов и применить их в полноценных, завершенных программах. Глава 13, Обработка исключений , обсуждает последнее существенное добавление к языку C-I-I-. Обработка исключений дает возможность программисту писать программы более живучие, более отказоустойчивые и более приспособленные для выполнения ответственных задач. Глава обсуждает, когда обработка исключений уместна, а когда нет; дает основы обработки исключений блоками try, операторами throw и блоками catch; показывает, как и когда целесообразно генерировать исключение повторно; объясняет, как писать спецификации исключений и обрабатывать непредусмотренные исключения; обсуждает важные связи между исключениями, конструкторами, деструкторами и наследованием. Особенности главы - 43 упражнения, которые проводят студента через реализацию программ, иллюстрирующих многообразие и мощность возможностей С-Ы- по обработке исключений. Глава 14, Обработка файлов и ввод-вывод потоков строк , обсуждает методы, используемые при обработке текстовых файлов с последовательным и произвольным доступом. Глава начинается с введения в иерархию данных: от битов к байтам, полям, записям и файлам. Затем представлен обзор файлов и потоков в С-Ы-. Файлы последовательного доступа обсуждаются на примере трех программ, которые показывают, как открывать и закрывать файлы, как последовательно сохранять данные в файле, и как последовательно читать данные из файла. Файлы произвольного доступа обсуждаются на примере четырех программ, которые показывают, как создать файл произвольного доступа, как осуществлять произвольное чтение и запись такого файла и как последовательно читать данные из файла произвольного доступа. Четвертая программа, объединяет методы произвольного и последовательного доступа при реализации законченного приложения диалоговой обработки запросов. Слушатели наших семинаров для промышленности говорили нам, что после изучения материала по обработке файлов они были способны составить серьезные программы обработки файлов, которые были немедленно использованы в их организациях. Глава обсуждает также возможности С-Ь-1-по вводу данных из символьных массивов в памяти и выводу данных в символьные массивы в памяти; эти возможности часто называются форматированием в памяти или обработкой потоков строк. Упражнения предлагают студентам реализовать ряд программ, которые формируют и обрабатывают как файлы последовательного доступа, так и файлы произвольного доступа. Глава 15, Структуры данных , обсуждает методы, используемые для создания и управления динамическими структурами данных. Глава начинается с обсуждения классов с самоадресацией и динамического распределения памяти. Далее в главе обсуждается, как создавать и поддерживать различные динамические структуры данных, включая связные списки, очереди, стеки и деревья. Для каждого типа структур данных мы даем полные рабочие программы и показываем типичные выводы результатов их работы. Глава реально помогает студентам овладеть указателями. Она включает множество примеров, использующих разименование и двойное разименование - понятия, особо трудные для усвоения. Одна из проблем при работе с указателями
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |