"Освой самостоятельно С++ за 21 день." - читать интересную книгу автора (Либерти Джесс) Джесс Либерти Освой самостоятельно C++ за 21 день. Об авторе Посвящение Благодарности Введение Для кого эта книга Неделя №1 Основные вопросы Несколько слов для программистов на языке C Что дальше День 1-й. Первые шаги Введение Краткий экскурс в историю языка C++ Программы Решение многих проблем Процедурное, структурированное и объектно-ориентированное программирование Язык C++ и объектно-ориентированное программирование Инкапсуляция Наследование и многократное использование Полиморфизм Эволюция языка C++ Нужно ли сначала изучить язык C C++ и Java Стандарт ANSI Подготовка к программированию Среда разработки Компиляция исходного кода программы Создание исполняемого файла с помощью компоновщика Цикл разработки Первая программа на языке C++ — HELLO.cpp Осваиваем компилятор Visual C++ 6 Построение проекта приветствия Ошибки компиляции Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 2-й. Составные части программы на языке C++ Простая программа на языке C++ Кратко об объекте cout Комментарии Виды комментариев Использование комментариев Напоследок предупреждение: осторожнее с комментариями! Функции Использование функций Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 3-й. Переменные и константы Что такое переменная Резервирование памяти Размер целых Знаковые и беззнаковые типы Базовые типы переменных Определение переменной Чувствительность к регистру букв Ключевые слова Создание нескольких переменных одного типа Присваивание значений переменным Ключевое слово typedef В каких случаях следует использовать типы short и long Переполнение беззнаковых целых Переполнение знаковых целочисленных значений Символы Символы и числа Специальные символы Константы Литеральные константы Символьные константы Определение констант с помощью директивы #deiine Определение констант с помощью ключевого слова const Константы перечислений Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 4-й. Выражения и операторы Выражения Символы пробелов Блоки и комплексные варажения Операции Операторы Оператор присваивания Математические операторы Целочисленное деление и деление по модулю Совместное использование математических операторов с операторами присваивания Инкремент декремент Префикс и постфикс Приоритеты операторов Вложение круглых скобок Что такое ИСТИННО Операторы отношений Оператор if Использование отступов в программных кодых Ключевое слово else Сложные конструкции с if Использование фигурных скобок для вложенных операторов if Логические операторы Логическое И Логическое ИЛИ Логическое НЕТ Вычисление по сокращенной схеме Приоритеты операторов отношений Подробнее об истине и лжи Условный оператор Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 5-й. Функции Что такое функция Возвращаемые значения, параметры и аргументы Объявление и определение функций Объявление функции Прототипы функций Определение функции Выполнение функций Локальные переменные Глобальные переменные Глобальные переменные; будьте начеку Подробнее о локальных переменных Операторы, используемые в функциях Подробнее об аргументах функций Использование функций в качестве параметров функций Параметры - это локальные переменные Подробнее о возвращаемых значениях Значения параметров, используемые по умолчанию Перегрузка функций Дополнительные сведения о функциях Подставляемые inline-функции Рекурсия Работа функций - приподнимаем завесу тайны Уровни абстракции Разбиение памяти Стек и функции Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 6-й. Базовые классы Создание новых типов Зачем создавать новый тип Классы и члены классов Объявление класса Несколько слов об используемых именах Определение объекта Классы в сравнении с объектами Получение доступа к членам класса Значения присваиваются объектам, а не классам Что объявишь, то и будешь иметь Ограничение доступа к членам класса Оставьте данные класса закрытыми Ограничение доступа к данным - это не способ защиты данных, а лишь средство облегчения программирования Определение методов класса Конструкторы и деструкторы Конструкторы и деструкторы, заданные по умолчанию Использование конструктора, заданного по умолчанию Объявление функций-членов со спецификатором const Чем отличается интерфейс от выполнения класса Где следует распологать в программе объявления классов и определения методов Выполнение с подстановкой Классы содержащие другие классы в качестве данных-членов Структуры Почему два ключевых слова несут одинаковую смысловую нагрузку Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 7-й. Циклы Организация циклов История оператора goto Почему следует избегать оператора goto Организация циклов с помощью оператора while Сложные конструкции с оператором while Операторы break и continue Использование конструкции while(true) Организация циклов с помощью конструкции do...while Использование конструкции do...while Оператор for Сложные выражения с оператором for Множественные инициализации и приращения счетчиков цикла Нулевые параметры цикла for Использование пустых циклов for Вложенные циклы Область видимости переменных-счетчиков циклов for Обобщение сведений о циклах Оператор switch Обработка комманд менб с помощью оператора switch Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения Подведение итогов Итоги первой недели Неделя №2 Основные вопросы Что дальше День 8-й. Указатели Что такое указатель Использование указателя как средства хранения адреса Имена указателей Оператор разыменовывания Указатели, адреса и переменные Обращение к данным через указатели Использование адреса, хранящегося в указателе Для чего нужны указатели Память стековая и динамически распределяемая Оператор new Оператор delete Что такое утечка памяти Размещение объектов в области динамической памяти Удаление объектов Доступ к членам класса Динамическое размещение членов класса Указатель this Блуждающие, дикие или зависшие указатели Использование ключевого слова const при объявлении указателей Использование ключевого слова const при объявлении указателей и функций-членов Указатель const this Вычисления с указателями Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 9-й. Ссылки Что такое ссылка Использование оператора адреса (amp;) при работе со ссылками Ссылки нельзя переназначать На что можно ссылаться Нулевые указатели и нулевые ссылки Передача аргументов функций как ссылок Передача указателей в функцию swap() Передача ссылок в функцию swap() Представления о заголовках функций и прототипах Возвращение нескольких значений Возвращение значений с помощью ссылок Передача ссылок на переменные как средство повышения эффективности Передача константного указателя Ссылки в качестве альтернативы Когда лучше использовать ссылки, а когда - указатели Коктейль из ссылок и указателей Не возвращайте ссылку на объект, который находиться вне области видимости! Возвращение ссылки на в области динамического обмена А где же уазатель? Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 10-й. Дополнительные возможности использования функции Перегруженные функции-члены Использование значений, заданных по умолчанию Выбор между значениями по умолчанию и перегруженными функциями Конструктор, принятый по умолчанию Перегрузка конструкторов Инициализация объектов Конструктор-копировщик Перегрузка операторов Запись Функции инкремента Перегрузка префиксных операторов Типы возвратов перегруженных функций операторов Возвращение безымянных временных объектов Использование указателя this Перегрузка постфиксных операторов Различия между преинкрементном и постинкрементном Оператор суммирования Перегрузка оператора суммирования Основные принципы перегрузки операторов Ограничения перегрузки операторов Что можно перегружать Оператор присваивания Операторы преобразований Операторы преобразования типов Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 11-й. Наследование Что такое наследование Иерархия и наследование Царство животных Синтаксис наследования классов Закрытый или защищенный Конструкторы и деструкторы Передача аргументов в базовые конструкторы Замещение функций Сокрытие метода базового класса Вызов базового метода Виртуальные методы Как работают виртуальные методы Нельзя брать там, находясь здесь Дробление объекта Виртуальные деструкторы Виртуальный конструктор-копировщик Цена виртуальности методов Резюме Вопросы и ответы Коллоквиум Тест Упражнения День 12-й. Массивы и связанные листы Что такое массивы Элементы массива Вывод данных за пределами массива Ошибки подсчета столбцов для забора Инициализация массива Объявление массивов Массивы объектов Многомерные массивы Инициализация многомерного массива Несколько слов о памяти Массивы указателей Объявление массивов в области динамического обмена Указатель на массив или массив указателей Имена массивов и указателей Удаление массива из области динамической памяти Массивы символов Функции strcpy() и strncpy() Классы строк Связанные списки и другие структуры Общие представления о связанных списках Делегирование ответственности Компоненты связанных списков Что мы узнали в этой главе Классы массивов Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 13-й. Полиморфизм Проблемы с одиночным наследованием Перенос метода вверх по иерархии классов Приведение указателя к типу производного класса Добавление объекта в два списка Множественное наследование Из каких частей состоят объекты, полученные в результате множественного наследования Конструкторы классов, полученных в результате множественного наследования Двусмысленность ситуации Наследование от общего базового класса Виртуальное наследование Проблемы с множественным наследованием Классы-мандаты Абстрактные типы данных Чистые виртуальные функции Выполнение чистых виртуальных функций Сложная иерархия абстракций Когда следует использовать абстрактные типы данных Логика использования абстрактных классов Пара слов о множественном наследовании, абстрактных типах данных и языке Java Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 14-й. Специальные классы и функции Статические переменные-члены Статические функции-члены Указатели на функции Зачем нужны указатели на функции Массивы указателей на функции Передача указателей на функции в другие функции Использование typedef с указателями на функции Указатели на функции члены Массивы указателейна функции-члены Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения Подведение итогов Неделя №3 Основные вопросы Что дальше День 15-й. Дополнительные возможности наследования Вложение Доступ к членам вложенного класса Фильтрация доступа к вложенным классам Цена вложений Передача объекта как значения Различные пути передачи функциональности классу Делегирование Закрытое наследование Классы друзья Функции друзья Функции друзья и перегрузка оператора Перегрузка оператора вывода Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 16-й. Потоки Знакомство с потоками Инкапсуляция Буферизация Потоки и буферы Стандартные объекты ввода-вывода Переадресация Вывод данных с помощью cin Строки Проблемы, возникающие при вводе строк Оператор gt;gt; возвращает ссылку на объект istream Другие методы объекта cin Ввод одного символа Использование функции gef() без параметров Использование функции get() с параметромВвод строк со стандартного устройства ввода Использование функции cin.ignore() Функции-члены peek() и putback() Ввод данных с помощью cout Очистка буфера вывода Функции-члены объекта cout Манипуляторы, флаги и команды форматирования Использование функции cout.width() Установка символов заполнения Установка флагов Сравнение потоков и функции printf() Использование файлов для ввода и вывода данных Объекты ofstream Состояния условий Открытие файлов для ввода-вывода Настройка открытия файла объектом ofstream Двоичные и тектовые файлы Установка параметров ввода-вывода с помощью коммандной строки Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 17-й. Пространства имен Введение Вызов по имени функций и классов Создание пространства имен Объявление и определение типов Объявление функций за пределами пространства имен Добавление новых членов Вложения пространства имен Использование пространства имен Ключевое слово using Использование using как оператора Использование using в объявлениях Псевдонимы пространства имен Неименованные пространства имен Стандартное пространство имен std Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 18-й. Анализ и проектирование объектно-ориентированных программ Являеться ли C++ объектно-ориентированным языком программирования Построение моделей Проектирование программ: язык моделирования Процесс проектирования программ Идея Анализ требований Ситуация использования Определение пользователей Определение первой ситуации использования Создание модели домена Обобщение Вложение Ассоциация Разработка сценариев Разработка путеводителей Диаграммы взаимодействий Создание пакетов Анализ совместимости приложения Анализ существующих систем Прочая документация Визуализация Артефакты Проектирование Что такое классы Преобразования Другие преобразования Обработка данных Отчеты Устройства Статическая модель Карточки CRC Как проводить заседания с карточками Сфокусируемся на распределении ответственности Как сделать класс живым Ограничения карточек CRC Создание модели UML no картонкам CRC Отношения между классами Множественное наследование против вложения Дискриминаторы и силовые классы Динамическая модель Диаграммы переходов состояний Сверхсостояния Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 19-й. Шаблоны Что такое шаблоны Параметризованные типы Создание экземпляра шаблона Объявление шаблона Использование имени шаблона Выполнение шаблона Функции шаблона Шаблоны и друзья Дружественные классы и функции, не являющиеся шаблонами Дружественный класс или функция как общий шаблон Использование экземпляров шаблона Специализированные функции Статические члены и шаблоны Стандартная библиотека шаблонов Контейнеры Последовательные контейнеры Вектор Список Контейнер двухсторонней очереди Стеки Очередь Ассоциативные контейнеры Карта Другие ассоциативные контейнеры Классы алгоритмов Операции, не изменяющие последовательность Алгоритмы изменения последовательности Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 20-й. Отслеживание исключительных ситуаций и ошибок Ошибки, погрешности, ляпусы и "гнилой" код Исключительные ситуации Несколько слов о "гнилом" коде Исключения Как используются исключения Использование блоков try и catch Перехват исключений Использование нескольких операторов catch Наследование исключений Данные в классах исключений и присвоение имен объектам исключений Исключения и шаблоны Исключения без ошибок Ошибки и отладка программы Точка останова Анализ значений переменных Исследование памяти Код ассемблера Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения День 21-й. Что дальше Процессор и компилятор Просмотр промежуточного файла Использование директивы #define Использование директивы #define для создания констант Использование директивы #define для тестирования Комманда препроцессора #else Включение файлов и предупреждение ошибок включения Макросы Зачем нужны все эти круглые скобки Макросы в сравнении с функциями шаблонов Подставляемые функции Операции со строками Оператор взятия в кавычки Конкатенация Встроенные макросы Макрос assert() Оладка программы с помощью assert() Макрос assert() вместо исключений Побочные эффекты Инварианты класса Печать промежуточных значений Уровни отладки Операции с битами данных Оператор И (AND) Оператор ИЛИ (OR) Оператор исключающего ИЛИ (XOR) Оператор дополнения до единицы Установка битов Сброс битов Инверсия битов Битовые поля Стиль программирования Отступы Фигурные скобки Длинные строки Конструкции с оператором switch Текст программы Имена идентификаторов Правописание и использование прописных букв в именах Комментарии Организация доступа к данным и методам Определения классов Включение файлов Макрос assert() Ключевое слово const Сделаем еще один шаг вперед Где получить справочную информацию и советы Журналы Выскажите свое мнение о книге Резюме Вопросы и ответы Коллоквиум Контрольные вопросы Упражнения Подведение итогов Приложение А Приоритеты операторов Приложение Б Ключевые слова C++ Приложение В Двоичные о числа Другие системы счисления Еще об основаниях Двоичная система счисления Почему именно основание 2 Биты, байты и полубайты Что такое килобайт Двоичные числа Шестнадцатерична система счисления Приложение Г - Ответы День 1 Контрольные вопросы Упражнения День 2 Контрольные вопросы Упражнения День 3 Контрольные вопросы Упражнения День 4 Контрольные вопросы Упражнения День 5 Контрольные вопросы Упражнения День 6 Контрольные вопросы Упражнения День 7 Контрольные вопросы Упражнения День 8 Контрольные вопросы Упражнения День 9 Контрольные вопросы Упражнения День 10 Контрольные вопросы Упражнения День 11 Контрольные вопросы Упражнения День 12 Контрольные вопросы Упражнения День 13 Контрольные вопросы Упражнения День 14 Контрольные вопросы Упражнения День 15 Контрольные вопросы Упражнения День 16 Контрольные вопросы Упражнения День 17 Контрольные вопросы Упражнения День 18 Контрольные вопросы Упражнения День 19 Контрольные вопросы Упражнения День 20 Контрольные вопросы Упражнения День 21 Контрольные вопросы Упражнения
Об авторе Джесс Либерти (Jesse Liberty) — автор шести книг, посвященных языку C++ и объектно-ориентированному анализу и проектированию, а также постоянный автор журнала C++ Report. Он возглавляет компанию Liberty Associates, Inc. (http://www.libertyassociates.com ), которая предоставляет услуги по обучению в Internet объектно-ориентированной разработке программных продуктов, а также занимается наставничеством, консультированием и контрактным программированием.
Джесс удостоился звания заслуженного программиста (Distinguished Software Engineer at ATamp;T) и работал в должности вице-президента отдела разработки Ситибанка (Citibank's Development Division). Он живет в окрестностях Кембриджа (шт. Массачусетс) с женой Стеси (Stacey) и дочерьми Робин (Robin) и Речел (Rachel). С ним можно связаться через Internet по адресу: [email protected] . Джесс осуществляет поддержку книги через свой же Web-узел по адресу: http://www.libertyassociates.com — щелкните на гиперссылке Books and Resources (Книги и ресурсы).