- •Глава 2. Модульное программирование 72
- •Глава 3. Технология создания программ 102
- •Часть II. Объектно-ориентированное программирование 173
- •Глава 4. Классы 178
- •Глава 13. Итераторы и функциональные объекты 328
- •Глава 14. Алгоритмы 343
- •Глава 15. Средства для численных расчетов 369
- •Глава 16. Другие средства стандартной библиотеки 378
- •Часть 1
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •If ( выражение ) оператор_1; [else оператор_2;]
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •If (f) cout « "ХпРезультат return 0;
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int* p (&а); // то же самое другим способом
- •Часть I. Структурное программирование
- •5 4 2 1 3 // Порядок интерпретации описания
- •56 Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int b[nstr][nstb]; // описание массива
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Глава 2
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Int sum(int a. Int b); // объявление функции
- •Глава 2. Модульное программирование
- •Void print_worker(Worker); //объявление функции
- •Часть I. Структурное программирование
- •Int fl(){return 1;} //правильно
- •Void f2(){return 1;} // неправильно. F2 не должна возвращать значение
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •92 Часть I. Структурное программирование
- •Глава 2. Модульное программирование 93
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Void fund (double); // Перегрузка
- •Void func2(int); // Верно (повторное объявление)
- •Часть I. Структурное программирование
- •Глава 2. Модульное программирование
- •Глава 3
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ 107
- •II Комментарий, описывающий,
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •If(!remove (&pbeg. &pend. 5))cout « "не найден";
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Глава 3. Технология создания программ
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Int f; //.Частота регенерации
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •168 Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть I. Структурное программирование
- •Часть II
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Глава 4
- •Глава 4. Классы
- •180 Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Int a::count: // Определение в глобальной области
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Часть II. Объектно-ориентированное программирование
- •Глава 4. Классы
- •Глава 5
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 5. Наследование
- •Часть II. Объектно-ориентированное программирование
- •Глава 6
- •Часть II. Объектно-ориентированное программирование
- •Void add(int d): // Добавление узла в конец списка
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Часть II. Объектно-ориентированное программирование
- •Глава 6. Шаблоны классов
- •Глава 7
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •Часть II. Объектно-ориентированное программирование
- •Глава 7. Обработка исключительных ситуаций
- •230 Часть II. Объектно-ориентированное программирование
- •Глава 8
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразование типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 8. Преобразования типов
- •Часть II. Объектно-ориентированное программирование
- •Глава 9
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •Часть II. Объектно-ориентированное программирование
- •Глава 9. Рекомендации по программированию
- •250 Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •254 Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть II. Объектно-ориентированное программирование
- •Часть III
- •Часть III. Стандартная библиотека
- •Глава 10 Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Часть III. Стандартная библиотека
- •Глава 10. Потоковые классы
- •Глава 11
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 11. Строки
- •Часть III. Стандартная библиотека
- •Глава 12
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы 317
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Часть III. Стандартная библиотека
- •Глава 12. Контейнерные классы
- •Глава 13
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 13. Итераторы и функциональные объекты
- •Часть III. Стандартная библиотека
- •Глава 14
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы 361
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 14. Алгоритмы
- •Часть III. Стандартная библиотека
- •Глава 15
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Часть III. Стандартная библиотека
- •Глава 15. Средства для численных расчетов
- •Глава 16
- •Глава 16. Другие средства стандартной библиотеки
- •Часть III. Стандартная библиотека
- •396 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •Int level; // флаг состояния буфера
- •Int bsize; // размер внутреннего буфера
- •I0lbf 1 построчная буферизация текстового файла;
- •400 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •402 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •404 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •406 Приложение 5. Константы, макросы и типы данных стандартной библиотеки
- •446 Приложение 6. Функции стандартной библиотеки
Глава 3. Технология создания программ 107
коллег (а еще лучше — врагов или завистников), и в тех местах, которые не будут им понятны без устных комментариев, внести их прямо в текст программы.
Комментарии имеют очень важное значение, поскольку программист, как ни странно, чаще читатель, чем писатель. Даже если сопровождающим программистом является автор программы, разбираться через год в плохо документированном тексте — сомнительное удовольствие.
Дальнейшие советы касаются комментариев и форматирования текста программы. Программы на C++ весьма плохо читаемы (лучше, чем программы на Perl, но хуже, чем на Pascal), и в них особенно важно придерживаться хорошего стиля при форматировании и документации.
«Программа без комментариев песопровождаема. Это... часовая бомба, а не компьютерная программа» [9]. Программа, если она используется, живет не один год, потребность в каких-то ее новых свойствах появляется сразу же после ввода в эксплуатацию, и сопровождение программы занимает гораздо больший промежуток времени, чем ее написание. Основная часть документации должна находиться в тексте программы. Хорошие комментарии написать почти так же сложно, как и хорошую программу.
Комментарии должны представлять собой правильные предложения без сокращений и со знаками препинания1 и не должны подтверждать очевидное (комментарии в этой книге не могут служить образцом, поскольку они предназначены для обучения, а не для сопровождения). Например, бессмысленны фразы типа «вызов функции f» или «описание переменных». Если комментарий к фрагменту программы занимает несколько строк, лучше разместить его до фрагмента, чем справа от него, и выровнять по вертикали. Абзацный отступ комментария должен соответствовать отступу комментируемого блока.
II Комментарий, описывающий,
// что происходит в следующем ниже
// блоке программы.
{ /* Непонятный
блок
программы */}
Для разделения функций и других логически законченных фрагментов пользуйтесь пустыми строками или комментарием вида
// Л
Вложенные блоки должны иметь отступ в 3-4 символа, причем блоки одного уровня вложенности должны быть выровнены по вертикали. Желательно, чтобы закрывающая фигурная скобка находилась строго под открывающей или в колонке, соответсвующей уровню вложенности блока. Форматируйте текст по столбцам везде, где это возможно:
#iпс1 tide <string.h> #include <stdlib.h> int main(){
Совсем хорошо, если они при этом не будут содержать орфографических ошибок.
108
Часть I. Структурное программирование
double m[10]; // комментарий const char s[] = "2, 38.5. 70, 0. 0. 1"; // комментарий char *p = s; .// комментарий int i = 0; // комментарий //
do{
m[i++] = atof(p); if (i > 9) break; }while(p = strchr(p, '.'), p++); for( int k = 0; k<i; k++) printf("*5.2f ". m[k]); return 0; } Для улучшения ясности можно отступить от правила отступов:
if ( is_best ) bestO;
else if ( is_bad ) worseO;
else if ( is_vovochka ) worstO;
Помечайте конец длинного составного оператора:
while(l){
while(gets(s)){
for(i = 0; i<10; i++){ for(j - 0; j<10: j++){
// две страницы кода } // for(j = 0; j<10: j++) } // for(i = 0; i<10; i++) } // while(gets(s)) } // while(l)
He следует размещать в одной строке много операторов. Как и в русском языке, после знаков препинания должны использоваться пробелы:
f=a+b;// плохо! Лучше f = а + Ь;
Очень много конкретных рекомендаций по программированию и проектированию программ на C++ содержится в книге Алена И. Голуба [9]. Массу интересного можно почерпнуть, осилив без малого 1000 страниц книги Б. Страуструпа [17]. В заключение хотелось бы привести цитату из этой книги: «Вопрос "Как писать хорошие программы на C++?" напоминает вопрос "Как писать хорошую английскую прозу?". Есть два совета: "Знай, что хочешь сказать" и "Тренируйся. Подражай хорошему стилю". Оба совета годятся как для C++, так и для английской прозы, и обоим одинаково сложно следовать.»