Описания, константы и перечисления

Как вы уже знаете, в программах на Си++ переменные обязательно должны

быть описаны до первого использования, например, так:

float number;

После оператора описания до момента выполнения первого оператора при-

сваивания значение переменной "number" будет неопределенным, т.е. эта переменная

может иметь случайное значение. В Си++ можно (и желательно) инициализировать

переменные конкретными значениями непосредственно при описании переменных.

Например, возможен следующий оператор описания с инициализацией:

float PI = 3.1416;

Если значение переменной в программе никогда не изменяется, то ее целесооб-

разно защитить от случайного изменения с помощью служебного слова "const" – т.е.,

превратить в константу.

4.1 Тип "Перечисление"

Для описания набора связанных по смыслу констант типа "int" в Си++ есть

оператор перечисления. Например, описание вида

enum { MON, TUES, WED, THURS, FRI, SAT, SUN };

эквивалентно описанию 7 констант-кодов дней недели:

const int MON = 0;

const int TUES = 1;

const int WED = 2;

const int THURS = 3;

const int FRI = 4;

const int SAT = 5;

const int SUN = 6;

По умолчанию членам перечисления "enum" присваиваются значения 0, 1, 2, и

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

чениями. Неинициализированным явно членам будут присвоены значения по поряд-

ку, начиная от предыдущего проинициализированного члена:

enum { MON = 1, TUES, WED, THURS, FRI, SAT = -1, SUN };

В приведенном примере "FRI" имеет значение 5, а "SUN" – значение 0.

25

4.2 Расположение описаний констант и переменных в исходном тексте

В исходном тексте описания констант чаще всего размещаются в заголовке

программы перед функцией "main". После них, уже в теле функции "main", размеща-

ются описания переменных. Для иллюстрации этого порядка ниже приведен фраг-

мент программы, которая рисует на экране окружность заданного радиуса и вычисля-

ет ее длину (набирать этот пример не надо, поскольку он приведен не полностью.)

#include <iostream.h>

const float PI = 3.1416;

const float SCREEN_WIDTH = 317.24;

int drawCircle(float diameter); /* Это "прототип функции" */

int main()

{

float radius = 0;

cout << "Введите радиус окружности.\n";

cin >> radius;

drawCircle(radius*2);

cout.setf(ios::fixed);

cout.precision(2);

cout << "Длина окружности радиуса " << radius;

cout << " примерно равна " << 2*PI*radius << ".\n";

return 0;

}

int drawCircle(float diameter)

{

float radius = 0;

if (diameter > SCREEN_WIDTH)

radius = SCREEN_WIDTH/2.0;

else

radius = diameter/2.0;

...

...

}

После определения функции "main()" в этой программе содержится определе-

ние функции рисования окружности "drawCircle(...)". Детали реализации этой

функции сейчас не существенны (будем считать, что функция drawCircle(...)" реа-

лизована корректно и ею можно пользоваться так же, как, например, функцией

"sqrt(...)"). Обратите внимание, что, хотя переменная "radius" используется в обеих

функциях "main()" и "drawCircle(...)", это не одна и та же переменная, а две разных.

Если бы переменная "radius" была описана до функции "main", то в таком слу-

чае она была бы глобальной переменной (общедоступной). Тогда, предполагая, что

внутри функции "drawCircle(...)" описания переменной уже нет, если "drawCircle(...)"

присвоит глобальной переменной значение "SCREEN_WIDTH/2.0", то это

значение чуть позже функция "main()" использует для вычисления длины окружности

и получится неверный результат.

В приведенной программе глобальной переменной нет, а есть две локальных

переменных "radius". Например, первая переменная "radius" является локальной пе-

26

ременной функции "main()", или, говорят, что функция "main()" является областью

видимости этой переменной.

Константы общего назначения, такие, как "PI" и "SCREEN_WIDTH", принято опи-

сывать глобально, чтобы они были доступны внутри любой функции.

Для контроля действий программы в приведенном фрагменте предусмотрено

повторное отображение данных, введенных пользователем. Другими словами, задан-

ное пользователем значение "radius" еще раз печатается на экране перед отображени-

ем длины окружности.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: