Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТ...docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
695.51 Кб
Скачать

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

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

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

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.

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

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

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

"main", размещаются описания переменных. Для иллюстрации этого порядка

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

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

поскольку он приведен не полностью.)

#include <iostream.h>

const float PI = 3.1416;

const float SCREEN_WIDTH = 317.24;

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

void 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";

}

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"

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

"main()" является областью видимости этой переменной.

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

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

функции.

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

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

Другими словами, заданное пользователем значение "radius" еще раз

печатается на экране перед отображением длины окружности.