Правила программирования на Си и Си++


         

Правила программирования на Си и Си++

Никогда не допускайте открытого доступа к закрытым данным - 2
Никогда не допускайте открытого доступа к закрытым данным - 3

Никогда не допускайте открытого доступа к закрытым данным - 4
Не пользуйтесь функциями типа get/set (чтения и присваивания значений)
Не пользуйтесь функциями типа get/set (чтения и присваивания значений) - 2
Откажитесь от выражений языка Си, когда программируете на Си++
Проектируйте с учетом наследования
Функция-член должна обычно использовать закрытые поля данных класса
Используйте константы
Используйте структуры только тогда, когда все данные открытые и нет функций-членов
Не размещайте тела функций в определениях классов
Не размещайте тела функций в определениях классов - 2

Избегайте перегрузки функций и аргументов, используемых по умолчанию
Избегайте перегрузки функций и аргументов, используемых по умолчанию - 2
Избегайте дружественных классов
Наследование — это форма сцепления
Не портьте область глобальных имен: проблемы Си++
Не портьте область глобальных имен: проблемы Си++ - 2
Не портьте область глобальных имен: проблемы Си++ - 3
Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями
Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - 2
Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - 3

Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - 4
Не возвращайте ссылки (или указатели) на локальные переменные
Не возвращайте ссылки на память, выделенную оператором new
Не возвращайте ссылки на память, выделенную оператором new - 2
Присваивание самому себе должно работать
Классы, имеющие члены-указатели
Исходите из того, что члены и базовые классы инициализируются в случайном порядке
Исходите из того, что члены и базовые классы инициализируются в случайном порядке - 2
Конструкторы копий должны использовать списки инициализации членов
Производные классы должны обычно определять конструктор копии и функцию operator=( )

Производные классы должны обычно определять конструктор копии и функцию operator=( ) - 2
Конструкторы, не предназначенные
Используйте счетчики экземпляров объектов для инициализации на уровне класса
Суперобложки на Си++ для существующих интерфейсов редко хорошо работают
Суперобложки на Си++ для существующих интерфейсов редко хорошо работают - 2
Суперобложки на Си++ для существующих интерфейсов редко хорошо работают - 3
Виртуальные функции — это те функции, которые вы не можете написать на уровне базового класса
Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора
Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора - 2
Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора - 3

Не вызывайте чисто виртуальные функции из конструкторов
Деструкторы всегда должны быть виртуальными
Функции базового класса
Не делайте функцию виртуальной
Защищенные функции обычно должны быть виртуальными
Опасайтесь приведения типов (спорные вопросы Си++)
Не вызывайте конструкторов из операции operator=( )
Не вызывайте конструкторов из операции operator=( ) - 2
Операция — это сокращение (без сюрпризов)
Операция — это сокращение (без сюрпризов) - 2

Используйте перегрузку операций
Перегрузив одну операцию, вы должны перегрузить все сходные с ней операции
Перегруженные операции должны работать точно так же, как они работают в Си
Перегруженные операции должны работать точно так же, как они работают в Си - 2
Перегруженной бинарной операции
Если можно, то делайте все преобразования типов с помощью конструкторов
Используйте new/delete вместо malloc()/free()
Вся память, выделенная в конструкторе, должна быть освобождена в деструкторе
Локальные перегрузки операторов new и delete опасны
Используйте встроенные шаблоны функций вместо параметризированных макросов

Всегда знайте размер шаблона после его расширения
Всегда знайте размер шаблона после его расширения - 2
Всегда знайте размер шаблона после его расширения - 3
Шаблоны не заменяют наследование; они его автоматизируют
Шаблоны не заменяют наследование; они его автоматизируют - 2
Шаблоны не заменяют наследование; они его автоматизируют - 3
Назначение исключений — не быть пойманными
Назначение исключений — не быть пойманными - 2
Назначение исключений — не быть пойманными - 3
По возможности возбуждайте объекты типа error

Возбуждение исключений из конструктора ненадежно
Возбуждение исключений из конструктора ненадежно - 2
Возбуждение исключений из конструктора ненадежно - 3
Возбуждение исключений из конструктора ненадежно - 4
Возбуждение исключений из конструктора ненадежно - 5
Возбуждение исключений из конструктора ненадежно - 6
Возбуждение исключений из конструктора ненадежно - 7
Возбуждение исключений из конструктора ненадежно - 8
Содержание