Оглавление Предисловие 6 Глава 1. Структура файла 11. 1.1 Авторские права и заявление о версии 11 1.2 Структура заголовочного файла 12 1.3 Структура файла определений 13 1.4 Роль заголовочных файлов 13 1.5 Структура каталогов 14 Глава 2 Структура программы 15 2.1 Пустая строка 15 2.2 Строка кода 16 2.3 Пробелы внутри строк кода17 2.4 Выравнивание18 2.5 Разделение длинных строк 19 2.6 Расположение модификаторов 19 2.7 Примечание 20 2.8 Расположение классов 21 Глава 3. Правила именования 22 3.1 Общие правила 22 3.2 Простые правила именования приложений WINDOWS 23 3.3 Простые правила именования приложений UNIX 25 Глава 4. Выражения и базовые операторы 26 4.1 Приоритет операторов 26 4.2 Сложные выражения 27 4.3 Оператор IF 27 4.4 Эффективность операторов цикла 29 4.5 Переменные управления циклом оператора FOR 30 4.6 Оператор SWITCH 30 4.7 Оператор GOTO 31 Глава 5. Константы 33 5.1 Зачем нужны константы 33 5.2 CONST и #DEFINE 33 5.3 Правила определения констант 33 5.4 Константы в классах 34 Глава 6. Функциональное проектирование 36 6.1 Правила для параметров 36 6.2 Правила возврата значений 37 6.3 Правила внутреннего выполнения функций 39 6.4 Другие предложения 40 6.5 Использование утверждений 41 6.6 Сравнение ссылок и указателей 42 Глава 7 Управление памятью 44 7.1 Метод распределения памяти 44 7.2 Распространенные ошибки памяти и меры борьбы с ними 44 7.3 Сравнение указателей и массивов 45 7.4 Как параметры указателя передаются в память? 47 7.5 Что происходит с указателями с помощью FREE и DELETE? 50 7.6 Будет ли динамическая память освобождаться автоматически? 50 7.7 Устранение «диких указателей» 51 7.8 Зачем нам NEW/DELETE, когда у нас есть MALLOC/FREE? 52 7.9 Что делать, если память закончилась? 53 7.10 Ключевые моменты использования MALLOC/FREE 54 7.11 Ключевые моменты использования NEW/DELETE 55 7.12 Некоторые идеи 56 Глава 8. Расширенные возможности функций C++ 57 8.1 Концепция перегрузки функций 57 8.2 Перегрузка, переопределение и скрытие функций-членов 60 8.3 Значения параметров по умолчанию 63 8.4 Перегрузка оператора 64 8.5 Встраивание функций 65 8.6 Некоторые идеи 68 Глава 9 Конструкторы, деструкторы и функции присваивания классов 69 9.1 Происхождение конструкторов и деструкторов 69 9.2 Таблица инициализации конструктора 70 9.3 Порядок строительства и разрушения 72 9.4 Пример: конструктор и деструктор класса STRING 72. 9.5 Не стоит недооценивать конструкторы копирования и функции присваивания 73 9.6 Пример: конструктор копирования и функция присваивания класса STRING 73 9.7 Ленивый способ работы с конструкторами копирования и функциями присваивания 75 9.8 Как реализовать основные функции класса в производном классе 75 9.9 Некоторые идеи 77 Глава 10. Наследование и композиция классов 78 10.1 Наследование 78 10.2 Комбинация 80 Глава 11. Другой опыт программирования 82 11.1 Использование CONST для повышения надежности функции 82 11.2 Повышение эффективности программы 84 11.3 Несколько полезных советов 85 Ссылка 87 Приложение A: Форма проверки кода C++/C 88 Приложение B: тестовые вопросы по C++/C 93 Приложение C. Ответы и критерии оценки для вопросов теста C++/C 97