Типы данных в языке C++__________________________________679

C++Builder являются перечислимыми, что упрощает работу с ними, поскольку
дает возможность работать не с абстрактными числами, а с осмысленными значе-
ниями.

Приведем пример, который покажет смысл введения пользователем своего пе-
речислимого типа. Пусть, например, в программе должна быть переменная Mode,
в которой зафиксирован один из возможных режимов работы приложения: чтение
данных, их редактирование, запись данных. Можно, конечно, дать переменной
Mode тип hit и присваивать этой переменной в нужные моменты времени одно из
трех условных чисел: 0 — режим чтения, 1 — режим редактирования, 2 — режим
записи. Тогда программа будет содержать операторы вида

if (Mode ==1) ...

Через некоторое время уже забудется, что означает значение Mode, равное 1, и
разбираться в таком коде будет очень сложно. А можно поступить иначе: опреде-
лить переменную Mode как переменную перечислимого типа и обозначить ее воз-
можные значения как mRead, mEdit, mWrite. Тогда приведенный выше оператор
изменится следующим образом:

if (Mode == mEdit) ...

Конечно, такой оператор понятнее, чем предыдущий.

Хороший стиль программирования —————————————————————————

Не вводите в свои программы числовые константы, отображающие какие-то режимы рабо-
ты или состояния объектов. Пользуйтесь для этого перечислимыми типами. Тогда код про-
граммы становится намного понятнее и легче осуществлять его модификацию и сопровож-
дение.

Переменные перечислимого типа могут определяться предложением вида:

enum {<константа 1>, ..., <константа п>) <имена переменных>;

Например
enum (mRead, mEdit, mWrite) Mode;

Этот оператор вводит именованные константы mRead, mEdit, mWrite и пере-
менную Mode, которая может принимать значения этих констант. В момент объяв-
ления переменная инициализируется значением первой константы, в нашем при-
мере — mRead. В дальнейшем вы можете присваивать ей любые допустимые зна-
чения. Например:

Mode = mEdit;

Значение переменной перечислимого типа можно проверять, сравнивая ее ве-
личину с возможными значениями. Кроме того, надо учитывать, что перечисли-
мые типы относятся к целым порядковым типам и к ним применимы любые опера-
ции сравнения: >, < и т.п. Например, вы можете писать операторы:

if(Mode > mRead)  ...
if(Mode < mWrite) ...
if(Mode == mEdit) ...

Вы можете также использовать Mode в структуре switch:

switch (Mode)
(
case mRead:

break;

case mEdit:  ...

break;

case mWrite: ...