В книге приводятся практические рекомендации по проектированию и программированию на языке C++. Изложены правила, позволяющие программисту сделать выбор между различными методами реализации программы — наследованием и шаблонами, шаблонами и указателями на базовые классы, открытым и закрытым наследованием, закрытым наследованием и вложенными классами, виртуальными и невиртуальными функциями и т.п. Для иллюстрации всех принципов используются новейшие языковые средства из стандарта ISO/ANSI C++ - внутриклассовая инициализация констант, пространства имен и шаблоны-члены класса. Рассматривается стандартная библиотека шаблонов и классы, подобные string и vector.
Содержание
Предисловие Введение
Глава 1. Переход от С к C++ Правило 1. Предпочитайте const и inline использованию #define Правило 2. Предпочитайте использованию Правило 3. Предпочитайте new и delete использованию malloc и free Правило 4. Предпочитайте комментарии в стиле C++
Глава 2. Управление памятью Правило 5. Используйте одинаковые формы new и delete Правило 6. Используйте delete в деструкторах для указателей членов Правило 7. Будьте готовы к нехватке памяти Правило 8. При написании операторов new и delete придерживайтесь ряда простых правил Правило 9. Старайтесь не скрывать «нормальную» форму new Правило 10. Если вы написали оператор new, напишите и оператор delete Глава 3. Конструкторы, деструкторы и операторы присваивания Правило 11. Для классов с динамическим выделением памяти объявляйте копирующий конструктор и оператор присваивания Правило 12. Предпочитайте инициализацию присваиванию в конструкторах Правило 13. Перечисляйте члены в списке инициализации в порядке их объявления Правило 14. Убедитесь, что базовые классы имеют виртуальные деструкторы Правило 15. operator = должен возвращать ссылку на *this Правило 16. В operator = присваивайте значения всем элементам данных Правило 17. В operator = осуществляйте проверку на присваивание самому себе Глава 4. Классы и функции: проектирование и объявление Правило 18. Стремитесь к таким интерфейсам классов, которые будут полными и минимальными Правило 19. Проводите различие между функциями-членами, функциями, не являющимися членами класса, и дружественными функциями Правило 20. Избегайте данных в открытом интерфейсе Правило 21. Везде, где только можно, используйте const Правило 22. Предпочитайте передачу параметров по ссылке передаче по значению Правило 23. Не пытайтесь вернуть ссылку, когда вы должны вернуть объект Правило 24. Тщательно обдумывайте выбор между перегрузкой функции и аргументами по умолчанию Правило 25. Избегайте перегрузки по указателю и численному типу Правило 26. Примите меры предосторожности против потенциальной неоднозначности Правило 27. Явно запрещайте использование нежелательных функций-членов, создаваемых компилятором по умолчанию Правило 28. Расчленяйте глобальное пространство имен Глава 5. Классы и функции: реализация Правило 29. Избегайте возврата «дескрипторов» внутренних данных Правило 30. Не используйте функции-члены, возвращающие неконстантные указатели или ссылки на члены класса с более ограниченным доступом Правило 31. Никогда не возвращайте ссылку на локальный объект или разыменованный указатель, инициализированный внутри функции посредством new Правило 32. Откладывайте определение переменных до последнего момента Правило 33. Тщательно обдумывайте использование встраиваемых функций Правило 34. Уменьшайте зависимости файлов при компиляции Глава 6. Наследование и объектно-ориентированное проектирование Правило 35. Используйте открытое наследование для моделирования отношения «есть разновидность» Правило 36. Различайте наследование интерфейса и наследование реализации Правило 37. Никогда не переопределяйте наследуемые невиртуальные функции Правило 38. Никогда не переопределяйте наследуемое значение аргумента по умолчанию Правило 39. Избегайте приведения типов вниз по иерархии наследования Правило 40. Моделируйте отношения «содержит» и «реализуется посредством» с помощью вложения Правило 41. Различайте наследование и шаблоны Правило 42. Продумывайте подход к использованию закрытого наследования Правило 43. Продумывайте подход к использованию множественного наследования Правило 44. Говорите то, что думаете, понимайте то, что говорите Глава 7. Другие принципы Правило 45. Необходимо знать, какие функции неявно создает и вызывает C++ Правило 46. Предпочитайте ошибки во время компиляции ошибкам во время выполнения Правило 47. Обеспечьте инициализацию нелокальных статических объектов до их использования Правило 48. Уделяйте внимание предупреждениям компилятора Правило 49. Ознакомьтесь со стандартной библиотекой Правило 50. Старайтесь понимать цели C++ Послесловие
Автор книги полагает, что читатели в конце концов начнут писать нетривиальные программы либо в качестве профессиональных разработчиков программного обеспечения, либо в качестве программистов, работающих в других областях науки и техники.
Эта книга — отличное пособие по самостоятельному освоению языка C++. В ней вы найдете ответы на все вопросы, неизбежно возникающие у программистов, начинающих работать с этим языком. Диапазон рассматриваемых тем чрезвычайно широк — от простейшей консольной программы, выводящей на экран крылатую фразу "Здравствуй, мир", до описания новейшей IDE Microsoft Visual Studio 2005, важнейших понятий объектно-ориентированного программирования и основных концепций Microsoft .NET.