Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование основы языка С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Символ Название / Описание Вид OCT DEC HEX ASCII HTML
Большая U с циркум-
Û
флексом
Ü
Большая U с умлаутом
Ý
Большая Y с акутом
Þ
-
ß
Лигатура SZ
à
Строчная А с грависом
á
Строчная А с акутом
Строчная А с циркум-
â
флексом
ã
Строчная А с тильдой
ä
Строчная А с умлаутом
å
Строчная А с кружком
æ
Строчная лигатура АЕ
ç
Строчная С с седилем
è
Строчная Е с грависом
é
Строчная Е с акутом
Строчная Е с циркум-
ê
флексом
ë
Строчная Е с умлаутом
ì
Строчная I с грависом
í
Строчная I с акутом
Строчная I c циркум-
î
флексом
ï
Строчная I с умлаутом
ð
Символ eth
ñ
Строчная N с тильдой
ò
Строчная O с грависом
ó
Строчная O с акутом
Строчная O с циркум-
ô
флексом
õ
Строчная O с тильдой
ö
Строчная O с умлаутом
÷
Деление
Û
333 219 DB Û Û
Ü
334 220 DC Ü Ü
Ý
335 221 DD Ý Ý
Þ
336 222 DE Þ Þ
ß
337 223 DF ß ß
à
340 224 E0 à à
á
341 225 E1 á á
â
342 226 E2 â â
ã
343 227 E3 ã ã
ä
344 228 E4 ä ä
å
345 229 E5 å å
æ
346 230 E6 æ æ
ç
347 231 E7 ç ç
è
350 232 E8 è è
é
351 233 E9 é é
ê
352 234 EA ê ê
ë
353 235 EB ë ë
ì
354 236 EC ì ì
í
355 237 ED í í
î
356 238 EE î &icirс;
ï
357 239 EF ï ï
ð
360 240 F0 ð ð
ñ
361 241 F1 ñ ñ
ò
362 242 F2 ò ò
ó
363 243 F3 ó ó
ô
364 244 F4 ô ô
õ
365 245 F5 õ õ
ö
366 246 F6 ö ö
÷
367 247 F7 ÷ ÷
151
Символ Название / Описание Вид OCT DEC HEX ASCII HTML
ø
Строчная O со слэшем
ù
Строчная U с грависом
ú
Строчная U с акутом Строчная U с циркум-
û
флексом
ü
Строчная U с умлаутом
ý
Строчная Y с акутом
þ
Строчная thorn
ÿ
Строчная Y с умлаутом
ø
370 248 F8 ø ø
ù
371 249 F9 ù ù
ú
372 250 FA ú ú
û
373 251 FB û û
ü
374 252 FC ü ü
ý
375 253 FD ý ý
þ
376 254 FE þ þ
ÿ
377 255 FF ÿ ÿ
Форматирование
BS Backspace (Возврат на один символ). Указывает на движение
механизма печати или курсора дисплея назад на одну позицию.
HT Horizontal Tabulation (Горизонтальное Табулирование). Указывает на движение механизма печати или курсора дисплея до сле­дующей предписанной 'позиции табуляции'.
LF Line Feed (Перевод строки). Указывает на движение механизма печати или курсора дисплея к началу следующей строки (на одну строку вниз).
VT Vertical Tabulation (Вертикальное Табулирование). Указывает на движение механизма печати или курсора дисплея к следующей группе строк.
FF Form Feed (Перевод страницы). Указывает на движение ме­ханизма печати или курсора дисплея к исходной позиции следующей страницы, формы или экрана.
CR Carriage Return (Перевод каретки). Указывает на движение меха­низма печати или курсора дисплея к исходной (крайней левой)позиции текущей строки.
Передача данных
SOH Start of Heading (Начало Заголовка). Используется для указа­ния начала заголовка, который может содержать информацию о марш­рутизации или адрес.
STX Start of Text (Начало Текста). Указывает на начало текста и одновременно на конец заголовка.
ETX End of Text (Конец Текста). Используется при завершении текста, который был начат с символа STX.
152
ENQ Enquiry (Запрос). Запрос идентификационных данных (типа
"Кто Вы?") от удаленной станции.
ACK Acknowledge (Подтверждение). Приемное устройство пере- дает этот символ отправителю в качестве подтверждения успешного приема данных.
NAK Negative Acknowledgement (Неподтверждение). Приемное устройство передает этот символ отправителю в случае отрицания (не­удачи) приема данных.
SYN Synchronous/Idle (Синхронизация). Используется в син­хронизированных системах передачи. В моменты отсутствия передачи данных система непрерывно посылает символы SYN для обеспечения синхронизации.
ETB End of Transmission Block (Конец Блока Передачи). Указывает на конец блока данных для коммуникационных целей. Используется для разбиения на отдельные блоки больших объемов данных.
Разделительные знаки при передаче информации
FS File Separator (Разделитель файлов).
GS Group Separator (Разделитель групп).
RS Record Separtator (Разделитель записей).
US Unit Separator (Разделитель элементов).
Другие символы
NUL Null. (No character- нет данных). Используется для передачи в случае отсутствия данных.
BEL Bell (Звонок). Используется для управления устройствами сигнализации.
SO Shift Out. Указывает, что все последующие кодовые комбина- ции должны интерпретироваться согласно внешнему набору символов до прихода символа SI.
SI Shift In. Указывает, что последующие кодовые комбинации должны интерпретироваться согласно стандартному набору символов.
DLE Data Link Escape (Переключение). Изменение значения иду­щих следом символов. Используется для дополнительного контроля или для передачи произвольной комбинации бит.
DC1, DC2, DC3, DC4 Device Controls (Контроль Устройства). Символы для управления вспомогательными устройствами (специаль­ными функциями).
153
CAN Cancel (Отмена). Указывает, что данные, который предше- ствовали этому символу в сообщении или блоке, должны игнорировать­ся (обычно в случае обнаружения ошибки).
EM End of Medium (Конец Носителя). Указывает на физический конец ленты или другого носителя информации
SUB Substitute (Заместитель). Используется для подмены ошибоч­ного или недопустимого символа.
ESC Escape (Расширение). Используется для расширения кода, указывая на то, что последующий символ имеет альтернативное значе­ние.
(sp) Space (Пробел). Непечатаемый символ для разделения слов или перемещения механизма печати или курсора дисплея вперед на одну позицию.
DEL Delete (Удаление). Используется для удаления (стирания) предыдущего знака в сообщении
154
Приложение Основные рекомендации
по стилю написания программного кода на С++
Основная цель рекомендаций – улучшение читаемости и, следова­тельно, ясности и легкости поддержки, а также общего качества кода. Невозможно дать рекомендации на все случаи жизни, поэтому про­граммист должен мыслить гибко [15].
1 Соглашения об именовании
1.1 Общие соглашения об именовании имена, представляющие типы, должны быть обязательно написаны
•
в смешанном регистре, начиная с верхнего:
Line, SavingsAccount;
имена переменных должны быть записаны в смешанном регистре,
•
начиная с нижнего: line, savingsAccount. Позволяет легко отличать переменные от типов, предотвращает потенциальные коллизии имен, например: Line line;
именованные константы (включая значения перечислений) долж-
•
ны быть записаны в верхнем регистре с нижним подчеркиванием в качестве разделителя: MAX_ITERATIONS, COLOR_RED, PI;
названия методов и функций должны быть глаголами, быть запи-
•
санными в смешанном регистре и начинаться с нижнего:
getName(), computeTotalWidth();
названия пространств имен следует записывать в нижнем регистре:
•
model::analyzer, io::iomanager, common::math::geometry;
следует называть имена типов в шаблонах одной заглавной буквой:
•
template<class T> ... template<class C, class D> ...
аббревиатуры и сокращения в именах должны записываться в
•
нижнем регистре:
exportHtmlSource(); // НЕЛЬЗЯ: exportHTMLSource(); openDvdPlayer(); // НЕЛЬЗЯ: openDVDPlayer();
глобальные переменные всегда следует использовать с оператором
•
разрешения области видимости (::): ::mainWindow.open(),
155
::applicationContext.getName()
членам класса с модификатором private следует присваивать суф-
•
фикс-подчеркивание:
class SomeClass { private: int length_; }
настраиваемым переменным следует давать то же имя, что и у их типа:
•
void setTopic(Topic* topic) // НЕЛЬЗЯ: void setTopic(Topic* value) // НЕЛЬЗЯ: void setTopic(Topic* aTopic) // НЕЛЬЗЯ: void setTopic(Topic* t) void connect(Database* database) // НЕЛЬЗЯ: void connect(Database* db) // НЕЛЬЗЯ: void connect (Database* oracleDB)
Не являющиеся настраиваемыми переменные могут быть названы
по их назначению и типу:
Point startingPoint, centerPoint; Name loginName;
все имена следует записывать по-английски:
•
fileName; // НЕ РЕКОМЕНДУЕТСЯ: imyaFayla
переменные, имеющие большую область видимости, следует на-
•
зывать длинными именами, имеющие небольшую область видимо­сти – короткими. Имена временных переменных, использующихся для хранения временных значений или индексов, лучше всего делать короткими;
имена объектов не указываются явно, следует избегать указания
•
названий объектов в именах методов:
line.getLength(); // НЕ РЕКОМЕНДУЕТСЯ: line.getLineLength();
1.2 Особые правила именования слова get/set должны быть использованы везде, где осуществляется
•
прямой доступ к атрибуту:
employee.getName(); employee.setName(name); matrix.getElement(2, 4); matrix.setElement(2, 4, value);
слово compute может быть использовано в методах, вычисляющих
•
что-либо:
valueSet->computeAverage(); matrix->computeInverse()
156
слово find может быть использовано в методах, осуществляющих
•
какой-либо поиск:
vertex.findNearestVertex(); matrix.findMinElement();
слово initialize может быть использовано там, где объект или сущ-
•
ность инициализируется:
printer.initializeFontSet();
переменным, представляющим GUI, следует давать суффикс, со-
•
ответствующий имени типа компонента:
mainWindow, propertiesDialog, widthScale, loginText, leftScrollbar, mainForm, fileMenu, minLabel, exitButton, yesToggle и т. д.
множественное число следует использовать для представления
•
наборов (коллекций) объектов.
vector<Point> points; int values[];
префикс n следует использовать для представления числа объектов:
•
nPoints, nLines
суффикс No следует использовать для обозначения номера сущности:
•
tableNo, employeeNo
переменным-итераторам следует давать имена i, j, k и т. д.
•
for (int i = 0; i < nTables); i++) { : }
префикс is следует использовать только для булевых (логических)
•
переменных и методов:
isSet, isVisible, isFinished, isFound, isOpen
В некоторых ситуациях префикс is лучше заменить на другой: has,
can или should:
bool hasLicense(); bool canEvaluate(); bool shouldSort();
симметричные имена должны использоваться для соответствую-
•
щих операций:
get/set, add/remove, create/destroy, start/stop, insert/delete, increment/dec­rement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/ new, open/close, show/hide, suspend/resume, и т. д.
следует избегать сокращений в именах:
•
computeAverage(); // НЕЛЬЗЯ: compAvg();
157
следует избегать дополнительного именования указателей:
•
Line* line; // НЕ РЕКОМЕНДУЕТСЯ: Line* pLine; // НЕ РЕКОМЕНДУЕТСЯ: Line* linePtr;
нельзя давать булевым (логическим) переменным имена, содер-
•
жащие отрицание:
bool isError; // НЕЛЬЗЯ: isNoError bool isFound; // НЕЛЬЗЯ: isNotFound
константы в перечислениях могут иметь префикс – общее имя типа:
•
enum Color { COLOR_RED, COLOR_GREEN, COLOR_BLUE };
классам исключений следует присваивать суффикс Exception:
•
class AccessException { : }
функциям (методам, возвращающим какие-либо значения) следует
•
давать имена в зависимости от того, что они возвращают, а проце­дурам – в зависимости от того, что они выполняют (методы void);
2 Файлы
2.1 Файлы исходных кодов
заголовочным файлам C++ следует давать расширение .h либо .hpp.
•
Файлы исходных кодов могут иметь расширения *.cpp:
MyClass.cpp, MyClass.h
класс следует объявлять в заголовочном файле и определять в файле
•
исходного кода, имена файлов совпадают с именем класса:
MyClass.h, MyClass.cрр
все определения должны находиться в файлах исходного кода:
•
class MyClass { public: int getValue () {return value_;} // НЕЛЬЗЯ! ... private: int value_; }
158
Заголовочные файлы объявляют интерфейс, файлы исходного кода
его реализовывают;
содержимое файлов не должно превышать 80 колонок;
•
нельзя использовать специальные символы (например, TAB) и
•
разрывы страниц;
незавершенность разбитых строк должна быть очевидна:
•
totalSum = a + b + c + d + e;
Разбивка строк появляется, когда ограничение на 80 колонок, опи­санное выше, нарушается. Общие принципы разбивки: разрыв после запятой; разрыв после оператора; выравнивание новой строки с началом выражения на предыдущей строке.
2.2 Включения файлов
заголовочные файлы должны содержать защиту от вложенного
•
включения:
#ifndef COM_COMPANY_MODULE_CLASSNAME_H
#define COM_COMPANY_MODULE_CLASSNAME_H
:
#endif // COM_COMPANY_MODULE_CLASSNAME_H
директивы включения следует сортировать (по месту в иерархии
•
системы, ниже уровень – выше позиция) и группировать:
#include <fstream> #include <iomanip>
#include <qt/qbutton.h> #include <qt/qtextfield.h>
#include "com/company/ui/PropertiesDialog.h" #include "com/company/ui/MainWindow.h"
Пути включения не должны быть абсолютными. Вместо этого сле-
дует использовать директивы компилятора;
директивы включения должны располагаться только в начале файла;
•
3 Выражения
3.1 Типы
локальные типы, используемые в одном файле, должны быть объ-
•
явлены только в нем;
159
разделы класса public, protected и private должны быть отсортиро-
•
ваны. Все разделы должны быть явно указаны;
приведение типов должно быть явным:
•
floatValue = static_cast<float>(intValue); // НЕЛЬЗЯ: floatValue = in-
tValue;
3.2 Переменные
следует инициализировать переменные в месте их объявления:
•
int x, y, z; getCenter(&x, &y, &z);
переменные никогда не должны иметь двойной смысл;
•
следует избегать использования глобальных переменных;
•
не следует объявлять переменные класса как public;
•
символ указателя или ссылки в языке C++ следует ставить сразу
•
после имени типа, а не с именем переменной:
float* x; // НЕ РЕКОМЕНДУЕТСЯ: float *x; int& y; // НЕ РЕКОМЕНДУЕТСЯ: int &y;
следует избегать неявного сравнения булевых (логических) пере-
•
менных и указателей с нулем:
if (nLines != 0) // НЕ РЕКОМЕНДУЕТСЯ: if (nLines) if (value != 0.0) // НЕ РЕКОМЕНДУЕТСЯ: if (value)
переменные следует объявлять в как можно меньшей области
•
видимости;
3.3 Циклы
нельзя включать в конструкцию for() выражения, не относящиеся
к управлению циклом:
sum = 0; // НЕЛЬЗЯ: for (i = 0, sum = 0; i < 100; i++) for (i = 0; i < 100; i++) sum += value[i]; sum += value[i];
переменные, относящиеся к циклу, следует инициализировать не-
посредственно перед ним:
isDone = false; // НЕ РЕКОМЕНДУЕТСЯ: bool isDone = false; while (!isDone) { // : : // while (!isDone) { } // : // }
можно избегать циклов do-while. Циклы do-while вообще не являются острой необходимостью. Любой такой цикл может быть заменен на цикл while или for.
160
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]