Заглавная страница

Материал из 55 правил С++
Перейти к навигации Перейти к поиску

Скотт Мэйерс. Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ[править | править код]

Глава 1. Приучайтесь к C++[править | править код]

Правило 1: Относитесь к C++ как к конгломерату языков

Правило 2: Предпочитайте const, enum и inline использованию #define

Правило 3: Везде, где только можно используйте const

Константные функции-члены
Как избежать дублирования в константных и неконстантных функциях-членах

Правило 4: Прежде чем использовать объекты, убедитесь, что они инициализированы

Глава 2. Конструкторы, деструкторы и операторы присваивания[править | править код]

Правило 5: Какие функции C++ создает и вызывает молча

Правило 6: Явно запрещайте компилятору генерировать функции, которые вам не нужны

Правило 7: Объявляйте деструкторы виртуальными в полиморфном базовом классе

Правило 8: Не позволяйте исключениям покидать деструкторы

Правило 9: Никогда не вызывайте виртуальные функции в конструкторе или деструкторе

Правило 10: Операторы присваивания должны возвращать ссылку на *this

Правило 11: В operator= осуществляйте проверку на присваивание самому себе

Правило 12: Копируйте все части объекта

Глава 3 Управление ресурсами[править | править код]

Правило 13: Используйте объекты для управления ресурсами

Правило 14: Тщательно продумывайте поведение при копировании классов, управляющих ресурсами

Правило 15: Предоставляйте доступ к самим ресурсам из управляющих ими классов

Правило 16: Используйте одинаковые формы new и delete

Правило 17: Помещение в «интеллектуальный» указатель объекта, вьщеленного с помощью new, лучше располагать в отдельном предложении

Глава 4 Проектирование программ и объявления[править | править код]

Правило 18: Проектируйте интерфейсы так, что их легко было использовать правильно и трудно – неправильно

Правило 19: Рассматривайте проектирование класса как проектирование типа

Правило 20: Предпочитайте передачу по ссылке на const передаче по значению

Правило 21: Не пытайтесь вернуть ссылку, когда должны вернуть объект

Правило 22: Объявляйте данные-члены закрытыми

Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса

Правило 24: Объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам

Правило 25: Подумайте о поддержке функции swap, не возбуждающей исключений

Глава 5 Реализация[править | править код]

Правило 26: Откладывайте определение переменных насколько возможно

Правило 27: Не злоупотребляйте приведением типов

Правило 28: Избегайте возвращения «дескрипторов» внутренних данных

Правило 29: Стремитесь, чтобы программа была безопасна относительно исключений

Правило 30: Тщательно обдумывайте использование встроенных функций

Правило 31: Уменьшайте зависимости файлов при компиляции

Глава 6 Наследование и объектно-ориентированное проектирование[править | править код]

Правило 32: Используйте открытое наследование для моделирования отношения «является»

Правило 33: Не скрывайте унаследованные имена

Правило 34: Различайте наследование интерфейса и наследование реализации

Правило 35: Рассмотрите альтернативы виртуальным функциям

Реализация паттерна««Шаблонный метод» с помощью идиомы невиртуального интерфейса
Реализация паттерна «Стратегия» посредством указателей на функции
Реализация паттерна «Стратегия» посредством класса tr::function
«Классический» паттерн «Стратегия»
Резюме

Правило 36: Никогда не переопределяйте наследуемые невиртуальные функции

Правило 37: Никогда не переопределяйте наследуемое значение аргумента функции по умолчанию

Правило 38: Моделируйте отношение «содержит» или «реализуется посредством» с помощью композиции

Правило 39: Продумывайте подход к использованию закрытого наследования

Правило 40: Продумывайте подход к использованию множественного наследования

Глава 7 Шаблоны и обобщенное программирование[править | править код]

Правило 41: Разберитесь в том, что такое неявные интерфейсы и полиморфизм на этапе компиляции

Правило 42: Усвойте оба значения ключевого слова typename

Правило 43: Необходимо знать, как обращаться к именам в шаблонных базовых классах

Правило 44: Размещайте независимый от параметров код вне шаблонов

Правило 45: Разрабатывайте шаблоны функций-членов так, чтобы они принимали «все совместимые типы»

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

Правило 47: Используйте классы-характеристики для предоставления информации о типах

Правило 48: Изучите метапрограммирование шаблонов

Глава 8 Настройка new и delete[править | править код]

Правило 49: Разберитесь в поведении обработчика new

Правило 50: Когда имеет смысл заменять new и delete

Правило 51: Придерживайтесь принятых соглашений при написании new и delete

Правило 52: Если вы написали оператор new с размещением, напишите и соответствующий оператор delete

Глава 9 Разное[править | править код]

Правило 53: Обращайте внимание на предупреждения компилятора

Правило 54: Ознакомьтесь со стандартной библиотекой, включая TR1

Правило 55: Познакомьтесь с Boost