Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Мэйерс Скотт
Год издания: 2008
Кол-во страниц: 300
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Аспирантура
ISBN: 5-94074-304-8
Артикул: 616180.01.99
К покупке доступен более свежий выпуск
Перейти
Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам. Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Отзывы о третьей редакции Эффективного использования C++ Книга Скотта Мейерса «Эффективное использование C++», третья редакция – это концентрация опыта программирования – того опыта, который без нее достался бы вам дорогой ценой. Эта книга – великолепный источник, который я рекомендую всем, кто пишет на C++ профессионально. Питер Дулимов, ME, инженер, подразделение оценки и исследований NAVSYSCOM, Австралия Третья редакция остается лучшей книгой, посвященной тому, как сложить вместе все части C++ для создания эффективных и внутренне целостных программ. Если вы претендуете на то, чтобы быть программистом C++, то должны ее прочитать. Эрик Наглер, консультант, преподаватель и автор «Изучая C++» Первая редакция этой книги была одной из небольшого (весьма небольшого) числа книг, благодаря которым я ощутимо повысил свой уровень как профессионального разработчика программного обеспечения. Как и другие книги из этого ряда, она оказалась практичной и легкой для чтения, но при этом содержала множество важных советов. «Эффективное использование C++», третья редакция, продолжает эту традицию. C++ – очень мощный язык программирования. Если C дает веревку, по которой можно забраться на вершину горы, то C++ – это целый магазин, в котором самые разные люди готовы помочь вам завязать на этой веревке узлы. Овладение материалом, приведенным в этой книге, определенно повысит вашу способность эффективно использовать C++ и не умереть при этом от напряжения. Джек В. Ривес, исполнительный директор Bleading Edge Software Technologies Каждый новый разработчик, который приходит в мою команду, сразу получает задание – прочесть эту книгу. Майкл Ланцетта, ведущий инженер по программному обеспечению Я прочитал первую редакцию «Эффективного использования C++» около 9 лет назад, и эта книга сразу стала одной из моих любимых книг по C++. На мой взгляд, третье издание «Эффективного использования C++» остается обязательным к прочтению для всех, кто желает эффективно программировать на C++. Мы будем жить в лучшем мире, если программисты C++ прочтут эту книгу прежде, чем написать первую строку профессионального кода. Дэнни Раббани, инженер по программному обеспечению
Первое издание «Эффективного использования C++» Скотта Мейерса попалось мне, когда я был рядовым программистом и напряженно старался как можно лучше выполнить порученную работу. И это было спасением! Я обнаружил, что советы Мейерса практически полезны и эффективны, что они на 100% реализуют то, что обещают. Третья редакция помогает в практическом применении C++ при работе над современными серьезными программными проектами, предоставляя информацию о самых новых средствах и возможностях языка. Я с удовольствием обнаружил, что могу найти много нового и интересного для себя в третьем издании книги, которую, как мне казалось, знаю очень хорошо. Майкл Топик, технический программный менеджер Это авторитетное руководство от Скотта Мейерса, гуру C++, предназначенное для каждого, кто хочет применять C++ безопасно и эффективно, или же переходит к C++ от любого другого объектноориентированного языка. Эта книга содержит ценную информацию, изложенную в ясном, сжатом, занимательном и проницательном стиле. Сиддхартха Каран Сингх, разработчик программного обеспечения
Скотт Мэйерс ЭффективноеиспользованиеС++
Scott Meyers Effective C++ Third Edition 55 Specific Ways to Improve Your Programs and Designs ADDISONWESLEY Upper Saddle River, NJ • Boston • Indianapolis • San Francisco New York • Toronto • Montreal • London • Munich • Paris • Madrid Capetown • Sydney • Tokyo • Singapore • Mexico City
Скотт Мэйерс Эффективное использование C++ Москва Третье издание 55 верных советов улучшить структуру и код ваших программ
УДК 004.4 ББК 32.973.26018.2 М97 Мэйерс С. М97 Эффективное использование C++. 55 верных способов улучшить структуру и код ваших прграмм – М.: ДМК Пресс. – 300 с.: ил. ISBN 5940743048 Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам. Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения. УДК 004.4 ББК 32.973.26018.2 Original Eglish language edition publihed by Pearson Education, Inc. Copyright © 2005 by Pearson Education, Inc. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 0321334876 (англ.) © Pearson Education, Inc. ISBN 5984533048 (АйТи) © Перевод на русский язык, оформление, © издание. ДМКПресс
Содержание Благодарности ............................................................................. 11 Предисловие ................................................................................ 15 Введение....................................................................................... 17 Терминология............................................................................. 18 Соглашения об именах ............................................................... 23 Многопоточность........................................................................ 24 Библиотеки TR1 и Boost.............................................................. 24 Глава 1. Приучайтесь к C++ ..................................................... 26 Правило 1: Относитесь к C++ как к конгломерату языков ........... 26 Правило 2: Предпочитайте const, enum и inline использованию #define .............................................................. 28 Правило 3: Везде, где только можно, используйте const ............ 31 Константные функциичлены ..................................................... 33 Как избежать дублирования в константных и неконстантных функцияхчленах ...................................................................... 37 Правило 4: Прежде чем использовать объекты, убедитесь, что они инициализированы ........................................................ 40 Глава 2. Конструкторы, деструкторы и операторы присваивания ..................................................... 47 Правило 5: Какие функции C++ создает и вызывает молча ......... 47 Правило 6: Явно запрещайте компилфятору генерировать функции, которые вам не нужны ................................................. 50 Правило 7: Объявляйте деструкторы виртуальными в полиморфном базовом классе ................................................. 52 Правило 8: Не позволяйте исключениям покидать деструкторы .... 56 Правило 9: Никогда не вызывайте виртуальные функции в конструкторе или деструкторе ................................................. 60
Содержание Содержание Содержание Содержание Содержание Правило 10: Операторы присваивания должны возвращать ссылку на *this ............................................................................ 64 Правило 11: В operator= осуществляйте проверку на присваивание самому себе .................................................... 65 Правило 12: Копируйте все части объекта .................................. 68 Глава 3. Управление ресурсами ............................................ 72 Правило 13: Используйте объекты для управления ресурсами .... 72 Правило 14: Тщательно продумывайте поведение при копировании классов, управляющих ресурсами .................. 76 Правило 15: Предоставляйте доступ к самим ресурсам из управляющих ими классов ..................................................... 79 Правило 16: Используйте одинаковые формы new и delete ........ 83 Правило 17: Помещение в «интеллектуальный» указатель объекта, выделенного с помощью new, лучше располагать в отдельном предложении .......................................................... 85 Глава 4. Проектирование программ и объявления ............ 87 Правило 18: Проектируйте интерфейсы так, что их легко было использовать правильно и трудно – неправильно....................... 87 Правило 19: Рассматривайте проектирование класса как проектирование типа ............................................................ 92 Правило 20: Предпочитайте передачу по ссылке на const передаче по значению ................................................................ 94 Правило 21: Не пытайтесь вернуть ссылку, когда должны вернуть объект ........................................................................... 98 Правило 22: Объявляйте данныечлены закрытыми ................. 102 Правило 23: Предпочитайте функциямчленам функции, не являющиеся ни членами, ни друзьями класса ...................... 105 Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам ................................................................. 109 Правило 25: Подумайте о поддержке функции swap, не возбуждающей исключений ................................................. 112 Глава 5. Реализация ............................................................... 119 Правило 26: Откладывайте определение переменных насколько возможно ................................................................. 119 Правило 27: Не злоупотребляйте приведением типов .............. 122
Содержание Содержание Содержание Содержание Содержание Правило 28: Избегайте возвращения «дескрипторов» внутренних данных ................................................................... 128 Правило 29: Стремитесь, чтобы программа была безопасна относительно исключений ........................................................ 132 Правило 30: Тщательно обдумывайте использование встроенных функций................................................................. 139 Правило 31: Уменьшайте зависимости файлов при компиляции ....................................................................... 144 Глава 6. Наследование и объектноориентированное проектирование ....................................................................... 153 Правило 32: Используйте открытое наследование для моделирования отношения «является» .............................. 153 Правило 33: Не скрывайте унаследованные имена................... 159 Правило 34: Различайте наследование интерфейса и наследование реализации ..................................................... 164 Правило 35: Рассмотрите альтернативы виртуальным функциям ................................................................................. 171 Реализация паттерна «Шаблонный метод» с помощью идиомы невиртуального интерфейса .................................................... 172 Реализация паттерна «Стратегия» посредством указателей на функции............................................................................. 173 Реализация паттерна «Стратегия» посредством класса tr::function .. 175 «Классический» паттерн «Стратегия» ........................................ 177 Резюме.................................................................................. 178 Правило 36: Никогда не переопределяйте наследуемые невиртуальные функции ........................................................... 179 Правило 37: Никогда не переопределяйте наследуемое значение аргумента функции по умолчанию ............................. 181 Правило 38: Моделируйте отношение «содержит» или «реализуется посредством» с помощью композиции ............... 185 Правило 39: Продумывайте подход к использованию закрытого наследования .......................................................... 188 Правило 40: Продумывайте подход к использованию множественного наследования ................................................ 193 Глава 7. Шаблоны и обобщенное программирование ..... 200 Правило 41: Разберитесь в том, что такое неявные интерфейсы и полиморфизм на этапе компиляции .................. 200
10 10 10 10 Содержание Содержание Содержание Содержание Содержание Правило 42: Усвойте оба значения ключевого слова typename ... 204 Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах .................................................. 207 Правило 44: Размещайте независимый от параметров код вне шаблонов ........................................................................... 212 Правило 45: Разрабатывайте шаблоны функцийчленов так, чтобы они принимали «все совместимые типы» ....................... 217 Правило 46: Определяйте внутри шаблонов функции, не являющиеся членами, когда желательны преобразования типа .......................................................................................... 221 Правило 47: Используйте классыхарактеристики для предоставления информации о типах ................................ 225 Правило 48: Изучите метапрограммирование шаблонов ......... 231 Глава 8. Настройка new и delete ........................................... 237 Правило 49: Разберитесь в поведении обработчика new .......... 238 Правило 50: Когда имеет смысл заменять new и delete ............ 244 Правило 51: Придерживайтесь принятых соглашений при написании new и delete ...................................................... 249 Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete......................... 252 Глава 9. Разное ........................................................................ 258 Правило 53: Обращайте внимание на предупреждения компилятора ............................................................................. 258 Правило 54: Ознакомьтесь со стандартной библиотекой, включая TR1 ............................................................................. 259 Правило 55: Познакомьтесь с Boost ......................................... 264 Приложение А. За пределами «Эффективного использования C++» ................................................................. 268 Приложение В. Соответствие правил во втором и третьем изданиях .................................................................................... 272
К покупке доступен более свежий выпуск
Перейти