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


Содержание


110. Никогда не допускайте открытого доступа к закрытым данным - часть 2
110. Никогда не допускайте открытого доступа к закрытым данным - часть 3
110. Никогда не допускайте открытого доступа к закрытым данным - часть 4
110.1. Не пользуйтесь функциями типа get/set (чтения и присваивания значений)
110.1. Не пользуйтесь функциями типа get/set (чтения и присваивания значений) - часть 2
111. Откажитесь от выражений языка Си, когда программируете на Си++
112. Проектируйте с учетом наследования
112.1. Функция-член должна обычно использовать закрытые поля данных класса
113. Используйте константы
114. Используйте структуры только тогда, когда все данные открытые и нет функций-членов
115. Не размещайте тела функций в определениях классов
115. Не размещайте тела функций в определениях классов - часть 2
116. Избегайте перегрузки функций и аргументов, используемых по умолчанию
116. Избегайте перегрузки функций и аргументов, используемых по умолчанию - часть 2
117. Избегайте дружественных классов
118. Наследование — это форма сцепления
119. Не портьте область глобальных имен: проблемы Си++
119. Не портьте область глобальных имен: проблемы Си++ - часть 2
119. Не портьте область глобальных имен: проблемы Си++ - часть 3
121. Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями
121. Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - часть 2
121. Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - часть 3
121. Никогда не используйте ссылки в качестве результатов, пользуйтесь указателями - часть 4
122. Не возвращайте ссылки (или указатели) на локальные переменные
123. Не возвращайте ссылки на память, выделенную оператором new
123. Не возвращайте ссылки на память, выделенную оператором new - часть 2
125. Присваивание самому себе должно работать
126. Классы, имеющие члены-указатели
129. Исходите из того, что члены и базовые классы инициализируются в случайном порядке
129. Исходите из того, что члены и базовые классы инициализируются в случайном порядке - часть 2
130. Конструкторы копий должны использовать списки инициализации членов
131. Производные классы должны обычно определять конструктор копии и функцию operator=( )
131. Производные классы должны обычно определять конструктор копии и функцию operator=( ) - часть 2
132. Конструкторы, не предназначенные
133. Используйте счетчики экземпляров объектов для инициализации на уровне класса
135. Суперобложки на Си++ для существующих интерфейсов редко хорошо работают
135. Суперобложки на Си++ для существующих интерфейсов редко хорошо работают - часть 2
135. Суперобложки на Си++ для существующих интерфейсов редко хорошо работают - часть 3
136. Виртуальные функции — это те функции, которые вы не можете написать на уровне базового класса
137. Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора
137. Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора - часть 2
137. Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора - часть 3
138. Не вызывайте чисто виртуальные функции из конструкторов
139. Деструкторы всегда должны быть виртуальными
140. Функции базового класса
141. Не делайте функцию виртуальной
142. Защищенные функции обычно должны быть виртуальными
143. Опасайтесь приведения типов (спорные вопросы Си++)
144. Не вызывайте конструкторов из операции operator=( )
144. Не вызывайте конструкторов из операции operator=( ) - часть 2
145. Операция — это сокращение (без сюрпризов)
145. Операция — это сокращение (без сюрпризов) - часть 2
146. Используйте перегрузку операций
147. Перегрузив одну операцию, вы должны перегрузить все сходные с ней операции
148. Перегруженные операции должны работать точно так же, как они работают в Си
148. Перегруженные операции должны работать точно так же, как они работают в Си - часть 2
149. Перегруженной бинарной операции
151. Если можно, то делайте все преобразования типов с помощью конструкторов
152. Используйте new/delete вместо malloc()/free()
153. Вся память, выделенная в конструкторе, должна быть освобождена в деструкторе
154. Локальные перегрузки операторов new и delete опасны
155. Используйте встроенные шаблоны функций вместо параметризированных макросов
156. Всегда знайте размер шаблона после его расширения
156. Всегда знайте размер шаблона после его расширения - часть 2
156. Всегда знайте размер шаблона после его расширения - часть 3
158. Шаблоны не заменяют наследование; они его автоматизируют
158. Шаблоны не заменяют наследование; они его автоматизируют - часть 2
158. Шаблоны не заменяют наследование; они его автоматизируют - часть 3
159. Назначение исключений — не быть пойманными
159. Назначение исключений — не быть пойманными - часть 2
159. Назначение исключений — не быть пойманными - часть 3
160. По возможности возбуждайте объекты типа error
161. Возбуждение исключений из конструктора ненадежно
161. Возбуждение исключений из конструктора ненадежно - часть 2
161. Возбуждение исключений из конструктора ненадежно - часть 3
161. Возбуждение исключений из конструктора ненадежно - часть 4
161. Возбуждение исключений из конструктора ненадежно - часть 5
161. Возбуждение исключений из конструктора ненадежно - часть 6
161. Возбуждение исключений из конструктора ненадежно - часть 7
161. Возбуждение исключений из конструктора ненадежно - часть 8



- Начало -