Программирование arrow C++ arrow Правила программирования на С и С++. Главы 7-8

Правила программирования на С и С++. Главы 7-8

Оглавление

1. Правила программирования на С и С++. Главы 7-8

2. Глава 7. Правила, относящиеся к языку С

3. Подавляйте демонов запутанности (Часть 2)

4. Избегайте битовых масок; используйте битовые поля

5. Для битового поля размером 1 бит должен быть определен тип unsigned

6. Указатели должны указывать на адрес, больший, чем базовый для массива

7. Используйте указатели вместо индексов массива

8. Избегайте goto, за исключением...

9. Глава 8. Правила программирования на С

10. Глава 8.А. Вопросы проектирования и реализации

11. Рассчитывайте потратить больше времени на проектирование и меньше на разработку

12. Библиотеки классов С обычно не могут быть использованы неискушенными пользователями

13. Пользуйтесь контрольными таблицами

14. Сообщения должны выражать возможности, а не запрашивать (предлагать ?) информацию

15. Вам обычно не удастся переделать имеющуюся структурную программу в объектно-ориентированную

16. Наследование - это процесс добавления полей данных и методов-членов

17. 98. Сначала проектируйте объекты

18. Затем проектируйте иерархию снизу вверх

19. Возможности, определенные в базовом классе, должны использоваться всеми производными классами

20. Инициализируйте виртуальные базовые классы при помощи конструктора, используемого по умолчанию

21. Используйте закрытые базовые классы лишь когда вы должны обеспечить виртуальные замещения

22. Проектируйте структуры данных в последнюю очередь

23. Никогда не допускайте открытого доступа к закрытым данным

24. Не пользуйтесь функциями типа get/set (чтения и присваивания значений)

25. Откажитесь от выражений языка С, когда программируете на С

26. Проектируйте с учетом наследования

27. Функция-член должна обычно использовать закрытые поля данных класса

28. Используйте константы

29. Используйте структуры только тогда, когда все данные открытые и нет функций-членов

30. Не размещайте тела функций в определениях классов

31. Избегайте перегрузки функций и аргументов, используемых по умолчанию

32. Глава 8.Б. Проблемы сцепления

33. Избегайте дружественных классов

34. Наследование - это форма сцепления

35. Не портьте область глобальных имен: проблемы С

36. Глава 8.В. Ссылки

37. Не возвращайте ссылки (или указатели) на локальные переменные

38. Не возвращайте ссылки на память, выделенную оператором new

39. Глава 8.Г. Конструкторы, деструкторы и operator=( )

40. Присваивание самому себе должно работать

41. Классы, имеющие члены-указатели, должны всегда определять конструктор копии и функцию operator=()

42. Исходите из того, что члены и базовые классы инициализируются в случайном порядке

43. Конструкторы копий должны использовать списки инициализации членов

44. Производные классы должны обычно определять конструктор копии и функцию operator=( )

45. Конструкторы, не предназначенные для преобразования типов, должны иметь два или более аргумента

46. Используйте счетчики экземпляров объектов для инициализации на уровне класса

47. Избегайте инициализации в два приема

48. Глава 8.Д. Виртуальные функции

49. Виртуальные функции - это те функции, которые вы не можете написать на уровне базового класса

50. Виртуальная функция не является виртуальной, если вызывается из конструктора или деструктора

51. Не вызывайте чисто виртуальные функции из конструкторов

52. Деструкторы всегда должны быть виртуальными

53. Функции базового класса, имеющие то же имя, что и функции производного класса, обычно должны быть виртуальными

54. Не делайте функцию виртуальной, если вы не желаете, чтобы производный класс получил контроль над ней

55. Защищенные функции обычно должны быть виртуальными

56. Опасайтесь приведения типов (спорные вопросы С )

57. Не вызывайте конструкторов из операции operator=( )

58. Глава 8.Е. Перегрузка операций

59. Используйте перегрузку операций только для определения операций, имеющих аналог в С (без сюрпризов)

60. Перегрузив одну операцию, вы должны перегрузить все сходные с ней операции

61. Перегруженные операции должны работать точно так же, как они работают в С

62. Перегруженной бинарной операции лучше всего быть встроенным (inline) псевдонимом операции приведения типа

63. Не сходите с ума с операторами преобразования типов

64. Глава 8.Ж. Управление памятью

65. Вся память, выделенная в конструкторе, должна быть освобождена в деструкторе

66. Локальные перегрузки операторов new и delete опасны

67. Глава 8.З. Шаблоны

68. Используйте встроенные шаблоны функций вместо параметризированных макросов

69. Всегда знайте размер шаблона после его расширения

70. Шаблоны не заменяют наследование; они его автоматизируют

71. Глава 8.И. Исключения

72. По возможности возбуждайте объекты типа error

73. Возбуждение исключений из конструктора ненадежно

74. Заключение


В этой книге делается попытка дать средство для преодоления этой трудности в виде собрания практических правил программирования на С++ и С - правил, которые, надеюсь, уберегут вас от неприятностей, если вы будете их использовать с самого начала. Хотя большинство из приводимых здесь правил применимы равно при программировании как на С, так и на С++, я включил много материала, относящегося лишь к миру С++ и сконцентрированного по мере возможности в заключительном разделе. Если вы программируете лишь на С, то просто игнорируйте материал по С++, встречающийся вам в более ранних разделах.

Ален И. Голуб


 
« Предыдущая статья   Следующая статья »