Язык программирования C++ для профессионалов


           

Язык программирования C++ для профессионалов

С++ является языком программирования общего назначения. Естественная для него область применения - системное программирование, понимаемое в широком смысле этого слова. Кроме того, С++ успешно используется во многих областях приложения, далеко выходящих за указанные рамки. Реализации С++ теперь есть на всех машинах, начиная с самых скромных микрокомпьютеров - до самых больших супер-ЭВМ, и практически для всех операционных систем. Поэтому книга дает лишь описание собственно языка, не объясняя особенности конкретных реализаций, среды программирования или библиотек.
Читатель найдет в книге много примеров с классами, которые, несмотря на несомненную пользу, можно считать игрушечными. Такой стиль изложения позволяет лучше выделить основные понятия и полезные приемы, тогда как в настоящих, законченных программах они были бы скрыты массой деталей. Для большинства предложенных здесь классов, как то связанные списки, массивы, строки символов, матрицы, графические классы, ассоциативные массивы и т.д., - приводятся версии "со 100% гарантией" надежности и правильности, полученные на основе классов из самых разных коммерческих и некоммерческих программ. Многие из "промышленных" классов и библиотек получились как прямые или косвенные потомки игрушечных классов, приводимых здесь как примеры.

Предисловие
В С++ нет типов данных и элементарных операций высокого уровня. Например, не существует типа матрица с операцией обращения или типа строка с операцией конкатенации. Если пользователю понадобятся подобные типы, он может определить их в самом языке. Программирование на С++ по сути сводится к определению универсальных или зависящих от области приложения типов. Хорошо продуманный пользовательский тип отличается от встроенного типа только способом определения, но не способом применения.

Замечания по проекту языка
Замечания по проекту языка - 2
Историческая справка
Сравнение языков С++ и С
Сравнение языков С++ и С - 2
Эффективность и структура
Философские замечания
Замечания о программировании на языке С++
Несколько полезных советов
Замечание для программистов на С

Парадигмы программирования
Приведены конструкции языка, которые существенны для каждого из перечисленных стилей программирования. Свойственный С стиль программирования обсуждается в разделах "процедурное программирование и "модульное программирование". Язык С++ - "лучший вариант С". Он лучше поддерживает такой стиль программирования, чем сам С, причем это делается без потери какой-либо общности или эффективности по сравнению с С. В то же время язык C является подмножеством С++.

Процедурное программирование
Модульное программирование
Абстракция данных
Абстракция данных - 2
Абстракция данных - 3
Пределы абстракции данных
Объектно-ориентированное программирование
Объектно-ориентированное программирование - 2
"Улучшенный С"
Программа и стандартный вывод

Область видимости
Описанием определяется область видимости имени. Это значит, что имя может использоваться только в определенной части текста программы. Если имя описано в функции (обычно его называют "локальным именем"), то область видимости имени простирается от точки описания до конца блока, в котором появилось это описание. Если имя не находится в описании функции или класса (его обычно называют "глобальным именем"), то область видимости простирается от точки описания до конца файла, в котором появилось это описание.

Объекты и адреса
Время жизни объектов
Имена
Типы
Основные типы
Основные типы - 2
Неявное преобразование типа
Производные типы
Тип void
Указатели

Калькулятор
Программа калькулятора состоит из четырех основных частей: анализатора, функции ввода, таблицы имен и драйвера. По сути - это транслятор в миниатюре, в котором анализатор проводит синтаксический анализ, функция ввода обрабатывает входные данные и проводит лексический анализ, таблица имен хранит постоянную информацию, нужную для работы, а драйвер выполняет инициализацию, вывод результатов и обработку ошибок.

Калькулятор
Анализатор
Анализатор - 2
Анализатор - 3
Анализатор - 4
Анализатор - 5
Функция ввода
Функция ввода - 2
Таблица имен
Таблица имен - 2

Связывание
Если явно не определено иначе, то имя, не являющееся локальным для некоторой функции или класса, должно обозначать один и тот же тип, значение, функцию или объект во всех единицах трансляции данной программы. Иными словами, в программе может быть только один нелокальный тип, значение, функция или объект с данным именем.

Заголовочные файлы
Заголовочные файлы - 2
Единственный заголовочный файл
Единственный заголовочный файл - 2
Единственный заголовочный файл - 3
Множественные заголовочные файлы
Множественные заголовочные файлы - 2
Множественные заголовочные файлы - 3
Связывание с программами на других языках
Связывание с программами на других языках - 2

Классы и члены
Понятие класса, которому посвящена эта и три следующих лекций, служит в С++ для того, чтобы дать программисту инструмент построения новых типов. Ими пользоваться не менее удобно, чем встроенными. В идеале использование определенного пользователем типа не должно отличаться от использования встроенных типов. Различия возможны только в способе построения.

Функции-члены
Классы
Классы - 2
Ссылка на себя
Ссылка на себя - 2
Ссылка на себя - 3
Инициализация
Инициализация - 2
Удаление
Подстановка

Производные классы
Любое понятие не существует изолированно, оно существует во взаимосвязи с другими понятиями, и мощность данного понятия во многом определяется наличием таких связей. Раз класс служит для представления понятий, встает вопрос, как представить взаимосвязь понятий. Понятие производного класса и поддерживающие его языковые средства служат для представления иерархических связей, иными словами, для выражения общности между классами.

Производные классы
Производные классы - 2
Свободная память
Свободная память - 2
Виртуальные конструкторы
Виртуальные конструкторы - 2
Виртуальные конструкторы - 3
Указание размещения
Указание размещения - 2
Функции-члены

Операторные функции
Обычно в программах используются объекты, являющиеся конкретным представлением абстрактных понятий. Например, в С++ тип данных int вместе с операциями +, -, *, / и т.д. реализует (хотя и ограниченно) математическое понятие целого. Обычно с понятием связывается набор действий, которые реализуются в языке в виде основных операций над объектами, задаваемых в сжатом, удобном и привычном виде.

Бинарные и унарные операции
Предопределенные свойства операций
Операторные функции и пользовательские типы
Пользовательские операции преобразования типа
Конструкторы
Конструкторы - 2
Операции преобразования
Операции преобразования - 2
Неоднозначности
Неоднозначности - 2

Простой шаблон типа
Одним из самых полезных видов классов является контейнерный класс, т.е. такой класс, который хранит объекты каких-то других типов. Списки, массивы, ассоциативные массивы и множества - все это контейнерные классы. С помощью описанных в лекциях 5 и 7 средств можно определить класс, как контейнер объектов единственного, известного типа. Например, в §5.3.2 определяется множество целых.

Простой шаблон типа
Простой шаблон типа - 2
Простой шаблон типа - 3
Шаблоны типа для списка
Список с принудительной связью
Список с принудительной связью - 2
Список с принудительной связью - 3
Список без принудительной связи
Список без принудительной связи - 2
Список без принудительной связи - 3

Обработка ошибок
Создатель библиотеки способен обнаружить динамические ошибки, но не представляет какой в общем случае должна быть реакция на них. Пользователь библиотеки способен написать реакцию на такие ошибки, но не в силах их обнаружить. Если бы он мог, то сам разобрался бы с ошибками в своей программе, и их не пришлось бы выявлять в библиотечных функциях. Для решения этой проблемы в язык введено понятие особой ситуации.

Другие точки зрения на особые ситуации
Различение особых ситуаций
Различение особых ситуаций - 2
Имена особых ситуаций
Группирование особых ситуаций
Группирование особых ситуаций - 2
Группирование особых ситуаций - 3
Производные особые ситуации
Производные особые ситуации - 2
Производные особые ситуации - 3

Вывод
Широко известна трудность задачи проектирования и реализации стандартных средств ввода-вывода для языков программирования. Традиционно средства ввода-вывода были рассчитаны исключительно на небольшое число встроенных типов данных. Однако, в нетривиальных программах на С++ есть много пользовательских типов данных, поэтому необходимо предоставить возможность ввода-вывода значений таких типов.

Вывод встроенных типов
Вывод пользовательских типов
Ввод
Ввод встроенных типов
Ввод встроенных типов - 2
Состояния потока
Состояния потока - 2
Ввод пользовательских типов
Форматирование
Класс ios

Человеческий фактор
Создание любой нетривиальной программной системы - сложная и часто выматывающая задача. Даже для отдельного программиста собственно запись операторов программы есть только часть всей работы. Обычно анализ всей задачи, проектирование программы в целом, документация, тестирование, сопровождение и управление всем этим затмевает задачу написания и отладки отдельных частей программы.

Свод правил
Список литературы с комментариями
Список литературы с комментариями - 2
Цели и средства
Цели и средства - 2
Цели и средства - 3
Процесс развития
Процесс развития - 2
Цикл развития
Цикл развития - 2

Проектирование и язык программирования
Если бы мне надо было построить мост, то я серьезно подумал бы, из какого материала его строить, и проект моста сильно зависел бы от выбранного материала, а, следовательно, разумные проекты каменного моста отличаются от разумных проектов металлического моста или от разумных проектов деревянного моста и т.д. Не стоит рассчитывать на выбор подходящего для моста материала без определенных знаний о материалах и их использовании.

Компоненты
Компоненты - 2
Компоненты - 3
Компоненты - 4
Интерфейсы и реализации
Интерфейсы и реализации - 2
Свод правил
Свод правил - 2
Игнорирование классов
Игнорирование классов - 2

Управление памятью
Разработка библиотеки общего назначения - это гораздо более трудная задача, чем создание обычной программы. Программа - это решение конкретной задачи для конкретной области приложения, тогда как библиотека должна предоставлять возможность решение для множества задач, связанных с многими областями приложения. В обычной программе позволительны сильные допущения об ее окружении, тогда как хорошую библиотеку можно успешно использовать в разнообразных окружениях, создаваемых множеством различных программ.

Управление памятью
Управление памятью - 2
Сборщик мусора
Контейнеры и удаление
Контейнеры и удаление - 2
Контейнеры и удаление - 3
Функции размещения и освобождения
Функции размещения и освобождения - 2
Упражнения
Упражнения - 2

Руководство полного чайника по программированию на языке Си

Функцией называется фрагмент программы, в который передаются ПАРАМЕТРЫ, и который ВОЗВРАЩАЕТ значение (или ничего).
Прелесть функции в том, что ее можно выполнить много раз из разных точек программы.

Переменные
Переменные - 2
Программа
* Структуры управления *
Условный оператор
Цикл while ("до тех пор, пока истинно")
Операторы "И, ИЛИ, НЕ"
Цикл for ("для каждого")
Оператор break ("вывалиться из цикла")
Оператор вывода (печати)


Эволюция современного мирового хозяйства - перейти
Экономика. Региональная - перейти
Муниципальный менеджмент - перейти
Государственные и муниципальные финансы - перейти
Финансы муниципальных образований - перейти
Региональная экономика - перейти
Основные понятия экономики региона - перейти
Экономика. Теневая - перейти
Алгебра и пакет Mathematica 5 - перейти
Введение - перейти
Исторический обзор и первое знакомство - перейти
Первое знакомство — калькулятор - перейти
Числа, их представление и операции над ними - перейти
Разложение целых чисел на множители - перейти
Арифметика: простые числа - перейти