Опубликован: 10.10.2006 | Уровень: специалист | Доступ: свободно
Курс дает описание языка C++, его ключевых понятий и основных приемов программирования на нем. Это завершенное руководство, написанное создателем языка, которое содержит описание всех средств С++, в том числе управление исключительными ситуациями, шаблоны типа (параметризованные типы данных) и множественное наследование.
C++ является языком программирования общего назначения. Естественная для него область применения - системное программирование, понимаемое в широком смысле этого слова. Кроме того, С++ успешно используется во многих областях приложения, далеко выходящих за указанные рамки. Реализации С++ теперь есть на всех машинах, начиная с самых скромных микрокомпьютеров - до самых больших супер-ЭВМ, и
практически для всех операционных систем. Поэтому книга дает лишь описание собственно языка, не объясняя особенности конкретных реализаций, среды программирования или библиотек.
Предварительные курсы |
План занятий
Занятие | Заголовок << | Дата изучения |
---|---|---|
- | ||
Введение58 минут | О курсеОглавление | - |
Лекция 11 час 27 минут | Краткий обзор С++
В этой лекции содержится краткий обзор основных концепций и конструкций
языка С++. Он служит для беглого знакомства с языком. Подробное описание
возможностей языка и методов программирования на нем дается в следующих
лекциях. Разговор ведется в основном вокруг абстракции данных и
объектно-ориентированного программирования, но перечисляются и основные
возможности процедурного программирования.
Оглавление | - |
Тест 136 минут | - | |
Лекция 21 час 30 минут | Описания и константы
В данной лекции описаны основные типы ( char, int, float и т.д.) и
способы построения на их основе новых типов (функций, векторов, указателей
и т.д.). Описание вводит в программу имя, указав его тип и, возможно,
начальное значение. В этой лекции вводятся такие понятия, как описание и
определение, типы, область видимости имен, время жизни объектов.
Даются обозначения литеральных констант С++ и способы задания
символических констант. Приводятся примеры, которые просто
демонстрируют возможности языка. Более осмысленные примеры, иллюстрирующие
возможности выражений и операторов языка С++, будут приведены в следующей
лекции. В этой лекции лишь упоминаются средства для определения
пользовательских типов и операций над ними. Они обсуждаются в лекциях 5 и 7.
Оглавление | - |
Тест 236 минут | - | |
Лекция 31 час 28 минут | Выражения и операторы
С++ имеет сравнительно небольшой набор операторов, который позволяет
создавать гибкие структуры управления, и богатый набор операций для
работы с данными. Основные их возможности показаны в этой лекции на одном
завершенном примере. Затем приводится сводка выражений, и подробно
обсуждаются операции преобразования типа и размещение в свободной памяти.
Далее дана сводка операторов, а в конце лекции обсуждается выделение
текста пробелами и использование комментариев.
Оглавление | - |
Тест 336 минут | - | |
Лекция 41 час 33 минуты | Функции
Все нетривиальные программы состоят из нескольких раздельно
транслируемых единиц, по традиции называемых файлами. В этой лекции
описано, как раздельно транслируемые функции могут вызывать друг друга,
каким образом они могут иметь общие данные, и как добиться
непротиворечивости типов, используемых в разных файлах программы.
Подробно обсуждаются функции, в том числе:
передача параметров, перегрузка имени функции,
стандартные значения параметров, указатели на функции и, естественно,
описания и определения функций. В конце лекции обсуждаются
макровозможности языка.
Оглавление | - |
Тест 436 минут | - | |
Лекция 51 час 30 минут | Классы
В этой лекции описываются возможности определения новых типов,
для которых доступ к данным ограничен заданным множеством
функций, осуществляющих его. Объясняется, как можно использовать
члены структуры данных, как ее защищать, инициализировать и,
наконец, уничтожать. В примерах приведены простые классы для
управления таблицей имен, работы со стеком, множеством и
реализации дискриминирующего (т.е. надежного) объединения.
Следующие три лекции завершают описание возможностей С++ для
построения новых типов, и в них содержится больше интересных
примеров.
Оглавление | - |
Тест 536 минут | - | |
Лекция 61 час 42 минуты | Производные классы
Эта лекция посвящена понятию производного класса. Производные
классы - это простое, гибкое и эффективное средство определения
класса. Новые возможности добавляются к уже существующему
классу, не требуя его перепрограммирования или перетрансляции.
С помощью производных классов можно организовать общий
интерфейс с несколькими различными классами так, что в других
частях программы можно будет единообразно работать с объектами
этих классов. Вводится понятие виртуальной функции, которое
позволяет использовать объекты надлежащим образом даже
в тех случаях, когда их тип на стадии трансляции неизвестен.
Основное назначение производных классов - упростить
программисту задачу выражения общности классов.
Оглавление | - |
Тест 636 минут | - | |
Лекция 71 час 41 минута | Перегрузка операций
Лекция содержит описание механизма перегрузки операций в С++.
Программист может задать интерпретацию операций, когда они
применяются к объектам определенного класса. Помимо арифметических,
логических и операций отношения можно переопределить вызов
функций (), индексацию [], косвенное обращение ->, а также
присваивание и инициализацию. Можно определить явные и скрытые
преобразования между пользовательскими и основными типами. Показано,
как определить класс, объект которого можно копировать и
уничтожать только с помощью специальных, определенных пользователем
функций.
Оглавление | - |
Тест 736 минут | - | |
Лекция 81 час 51 минута | Шаблоны типа
В этой лекции вводится понятие шаблона типа. С его помощью можно
достаточно просто определить и реализовать без потерь в
эффективности выполнения программы и, не отказываясь от статического
контроля типов, такие контейнерные классы, как списки и ассоциативные
массивы. Кроме того, шаблоны типа позволяют определить сразу для
целого семейства типов обобщенные (генерические) функции, например,
такие, как sort (сортировка). В качестве примера шаблона типов и
его связи с другими конструкциями языка приводится семейство
списочных классов. Чтобы показать способы получения программы из
в значительной степени независимых частей, приводится несколько
вариантов шаблонной функции sort(). В конце определяется простой
шаблон типа для ассоциативного массива и показывается на двух
небольших демонстрационных программах, как им пользоваться.
Оглавление | - |
Тест 836 минут | - | |
Лекция 91 час 37 минут | Механизм обработки особых ситуаций
В этой лекции описан механизм обработки особых ситуаций и некоторые,
основывающиеся на нем, способы обработки ошибок. Механизм состоит
в запуске особой ситуации, которую должен перехватить специальный
обработчик. Описываются правила перехвата особых ситуаций и
правила реакции на неперехваченные и неожиданные особые ситуации.
Целые группы особых ситуаций можно определить как производные
классы. Описывается способ, использующий деструкторы и обработку
особых ситуаций, который обеспечивает надежное и скрытое от
пользователя управление ресурсами.
Оглавление | - |
Тест 936 минут | - | |
Лекция 101 час 40 минут | Потоки
В языке С++ нет средств для ввода-вывода. Их и не нужно, поскольку
такие средства можно просто и элегантно создать на самом языке.
Описанная здесь библиотека потокового ввода-вывода реализует строгий
типовой и вместе с тем гибкий и эффективный способ символьного ввода и
вывода целых, вещественных чисел и символьных строк, а также является
базой для расширения, рассчитанного на работу с пользовательскими типами
данных. Пользовательский интерфейс библиотеки находится в файле
<iostream.h>. Эта лекция посвящена самой потоковой библиотеке, некоторым
способам работы с ней и определенным приемам реализации библиотеки.
Оглавление | - |
Тест 1036 минут | - | |
Лекция 112 часа 6 минут | Проектирование и развитие
В этой главе обсуждаются подходы к разработке программного обеспечения.
Обсуждение затрагивает как технические, так и социологические аспекты
процесса развития программного обеспечения. Программа рассматривается
как модель реальности, в которой каждый класс представляет определенное
понятие. Ключевая задача проектирования состоит в определении доступной
и защищенной частей интерфейса класса, исходя из которых определяются
различные части программы. Определение этих интерфейсов есть
итеративный процесс, обычно требующий экспериментирования. Упор
делается на важной роли проектирования и организационных факторов
в процессе развития программного обеспечения.
Оглавление | - |
Тест 1136 минут | - | |
Лекция 122 часа 6 минут | Проектирование и С++
Эта лекция посвящена связи между проектированием и языком
программирования С++. В ней исследуется применение классов при
проектировании и указываются определенные виды зависимостей, которые
следует выделять как внутри класса, так и между классами. Изучается
роль статического контроля типов. Исследуется применение наследования
и связь наследования и принадлежности. Обсуждается понятие компонента
и даются некоторые образцы для интерфейсов.
Оглавление | - |
Тест 1236 минут | - | |
Лекция 132 часа 33 минуты | Проектирование библиотек
Эта лекция содержит описание различных приемов, оказавшихся полезными
при создании библиотек для языка С++. В частности, в ней
рассматриваются конкретные типы, абстрактные типы, узловые классы,
управляющие классы и интерфейсные классы. Помимо этого обсуждаются
понятия обширного интерфейса и структуры области приложения,
использование динамической информации о типах и методы управления
памятью. Внимание акцентируется на том, какими свойствами должны
обладать библиотечные классы, а не на специфике языковых средств,
которые используются для реализации таких классов и не на
определенных полезных функциях, которые должна предоставлять библиотека.
Оглавление | - |
Тест 1336 минут | - | |
5 часов | - |