Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4257

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 8. Типы данных, определяемые программистом 

101 

 

В языке программирования C++ новые типы данных могут объяв-
ляться в любом месте программы. 

Область  видимости  типов  данных,  определяемых  программи-
стом, подчиняется тем же правилам, что и имена переменных. 
В заключение этого введения скажем, что так новые типы данных 
определяются  программистом,  то  они  часто  называются 

пользо-

вательскими

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

вается программист. 

8.2. Перечисления 

Перечислением 

называется тип данных, который включает набор 

именованных  целочисленных  констант.  Элементы  перечисления 
называются 

членами  перечисления

  или 

перечислимыми 

констан-

тами. Объявляются перечисления следующим образом: 

  enum [имя_перечисления] {список_значений}; 

Здесь 

enum

 — ключевое слово, 

имя_перечисления

 служит для име-

нования  типа  перечисления  и  называется 

тегом

 

перечисления

,  а 

список_значений

  перечисляет  именованные  целочисленные  кон-

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

  enum color {r = 2, g = 4, b = 6};  /* объявление типа */ 

По умолчанию перечислимым константам присваиваются после-
довательные значения, начиная с нуля. Например: 

  enum color {r, g, b};  /* r = 0, g = 1, b = 2 */ 

Если,  начиная  с  некоторой  перечислимой  константы,  инициали-
зация прекращается, то следующей перечислимой константе при-
сваивается  значение  на  единицу  большее,  чем  значение  преды-
дущей перечислимой константы. Например: 

  enum color {r, g = 3, b};  /* r = 0, g = 3, b = 4 */ 


background image

Часть I. Язык программирования С 

102 

Допускается  объявление  перечислений,  не  имеющих  имени.  Та-
кие перечисления называются 

анонимными

. Например: 

  enum {off, on};  /* анонимное перечисление */ 

Анонимные перечисления используются просто для определения 
именованных целочисленных констант. 
Тип  перечисления  определяется  ключевым  словом 

enum

  и  тегом 

перечисления.  Поэтому  переменная  типа  "перечисление"  объяв-
ляется следующим образом: 

  enum имя_перечисления  имя_переменной; 

Например: 

  enum color c;  /* с – переменная типа enum color */

 

 

В языке программирования C++ тип перечисления может опреде-
ляться только именем перечисления. 

Учитывая  это  замечание,  в  языке  программирования  C++  пере-
менную типа "перечисление" можно объявить следующим образом: 

  color d;  // d – переменная типа color 

Объявление типа перечисления и переменной, которая имеет этот 
тип, может быть объединено в одну инструкцию. Например: 

  enum light {off, on} t;  /* t – имя переменной */ 

Допускается  объявление  переменных,  которые  имеют  тип  ано-
нимного перечисления. Например: 

  enum {off, on} t; 

Переменной  типа  перечисления  можно  присваивать  только  зна-
чения, принадлежащие ее типу. Эти значения могут присваивать-
ся переменной, используя как имена перечислимых констант, так 
и целочисленные значения. Например: 

  color c = g; 
  color c = 2; 


background image

Глава 8. Типы данных, определяемые программистом 

103 

 

В  языке  программирования  С++  переменным  типа  перечисления 
можно  присваивать  значения,  используя  только  имена  перечис-
лимых констант. 

Учитывая это замечание, следующая инструкция: 

  color c = 0; 

вызовет ошибку в языке программирования С++. 
Целочисленным переменным можно присваивать значения пере-
числимых констант. Например: 

  int  e = r; 

8.3. Структуры 

Структурой

  называется  упорядоченное  множество  данных,  ко-

торые  называются 

полями 

или

  членами  структуры

.  Поля  струк-

туры  могут  иметь  любой  тип,  исключая  типы 

void

  и  функцию. 

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

Структурным  типом  данных

  или 

просто 

структурой

  называется  тип,  описывающий  структуру. 

Объявляется структурный тип следующим образом: 

  struct [имя_структуры] 
  { 
    /* объявления членов структуры */ 
  }; 

Здесь 

struct

 — ключевое слово, а 

имя_структуры

 служит для име-

нования  структурного  типа  и  называется 

тегом

 

структуры

,  а 

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

;

. Например: 

  struct emp 
  { 
    int empno; 


background image

Часть I. Язык программирования С 

104 

    char name[20]; 
    double salary; 
  }; 

Допускается  объявление  структур,  не  имеющих  имени.  Такие 
структуры называются 

анонимными

. Например: 

  struct {double x, y;};  /* анонимная структура */ 

Тип  структуры  определяется  ключевым  словом 

struct

  и  тегом 

структуры.  Поэтому  переменная  структурного  типа  объявляется 
следующим образом: 

  struct имя_структуры  имя_переменной; 

Например: 

  struct emp e;  /* e – переменная типа struct emp */

 

 

В языке программирования С++ тип структуры также определяет-
ся только именем структуры. 

Учитывая  это  замечание,  в  языке  программирования  С++  пере-
менную  структурного  типа  можно  также  объявить  следующим 
образом: 

  emp d;  // d – переменная типа emp 

Объявление структурного типа и переменной, которая имеет этот 
тип, может быть объединено в одну инструкцию. Например: 

  struct emp 
  { 
    int empno; 
    char name[20]; 
    double salary; 
  } director;  /* director – имя переменной */ 

Допускается  объявление  переменных,  которые  имеют  тип  ано-
нимной структуры. Например: 

  struct {double x, y;} vect; 

Обычно  переменные  структурного  типа  также  называются 

структурами


background image

Глава 8. Типы данных, определяемые программистом 

105 

Инициализируются структуры так же, как и массивы. Например: 

  struct emp a = {10, "Paul", 2000}; 

Так как члены структуры описываются в блоке, то их имена при-
надлежат локальной области видимости внутри этого блока. Для 
доступа к элементу структуры используется 

оператор 

.

 (точка)

который имеет следующий вид: 

  переменная.имя_поля 

где переменная должна иметь структурный тип. Например: 

  director.empno = 20; 
  strcpy(director.name, "John");  /* копирование строки */ 
  director.salary = 3000; 

Здесь 

strcpy

  стандартная  функция  для  копирования  строк,  кото-

рая описана в 

разд. 29.2

Оператор 

.

  (точка)  возвращает  L-value,  имеет  ассоциативность 

слева  направо  и  его  приоритет  совпадает  с  приоритетом  пост-
фиксных операций инкремента и декремента. 
Элементами структуры могут быть массивы и другие структуры. 
Отсюда следует, что допускается вложенность структур. Для дос-
тупа к членам вложенной структуры оператор 

.

 (точка)

 

использу-

ется  столько  раз,  какова  вложенность  структуры.  Область  види-
мости  имени  вложенной  структуры  совпадает  с  областью  види-
мости внешней структуры. 

 

В  языке  программирования  С++  область  видимости  вложенной 
структуры ограничивается блоком, в котором эта структура объяв-
лена. 

В  листинге  8.1  показан  пример  обращения  к  членам  вложенной 
структуры. 

Листинг 8.1. Пример вложенных структур 

#include <stdio.h> 
struct demo 


Смотрите также файлы