Шаг 37.
Microsoft Visual C++ 2010. Язык С/С++.
Новые типы переменных

    На этом шаге мы рассмотрим перечислимые и логические типы.

    Мы уже знаем, что в языке С, наряду с рассмотренными типами переменных (int, char, float), существуют и другие типы данных, сведения о которых необходимо уточнить:

    Кроме того, существуют также следующие типы данных: enum и bool. Рассмотрим каждый из них подробнее.

    Перечислимый тип данных enum позволяет задавать мнемонические значения для множеств целых значений (т. е. обозначать значения в соответствии с их смыслом).

    Допустим, нам надо работать в программе с наименованиями дней недели (например, проверять, что текущий день - понедельник). Пока не было типа данных enum, надо было как-то задавать дни недели числами и работать с этими числами. Для дней недели это и не особенно сложно: каждый помнит, что седьмой день это воскресенье, а первый - понедельник (хотя в английском варианте первым днем считается как раз воскресенье).

    Но бывают множества, как говорят, и "покруче", чем дни недели, элементы которых не упомнишь. Поэтому с помощью типа enum можно добиться большей наглядности и лучшего понимания программы. Приведем пример программы с использованием типа enum.

void main()
{
  enum days {sun, mon, tues, wed, thur, fri, sat} anyday; 
  enum sex {man, wom} pol; 
  anyday=sun; 
  pol=wom;
  if (anyday==0 && pol == worn)    // можно писать либо anyday==sun,
                                   // либо anyday==0; 
}

    Запись

enum days {sun, mon, tues, wed, thur, fri, sat} anyday
пример объявления перечислимого типа days. Все, что в фигурных скобках, - это заданные заранее значения типа days. Сам тип days задает как бы шаблон, который самостоятельно применять нельзя: это обычный тип данных. Следует объявить дополнительно другую переменную этого типа: ее имя можно записать сразу при объявлении шаблона между последней фигурной скобкой и двоеточием (у нас это переменная anyday). Можно было бы записать объявление так:
  enum days {sun, mon, tues, wed, thur, fri, sat}; //ввели тип 
  days anyday, оtherdays; //объявили 2 переменные данного типа

    В любом случае после этого переменной anyday (или, как во втором случае переменной otherdays) можно присваивать значения из определенного в enum списка:

  anyday=sun; 

    Если список приведен в виде enum days {sun, mon, tues, wed, thur, fri, sat}, то подразумевается, что его элементы имеют последовательные целые числовые значения: 0, 1, 2,... (т. е. вместо anyday==sun можно писать anyday==0). Список, указанный в enum, можно при объявлении инициализировать другими целыми значениями. Например, имеем перечислимый тип "кувшины (объемы в литрах)":

  enum {Vol1=5, Vol2=7, Vol3=9, Vol4, Vol5, Vol6} pitchers;

    У первого, второго и третьего элементов этого множества числовые значение соответственно равны 5, 7 и 9. Остальным элементам, не определенным нами, компилятор присвоит последовательные (через единицу) значения, начиная со значения последнего определенного элемента (т. е. с Vol3): Vol4 получит значение Vol3+1 (т. е. 10), Vol5 - значение 11, Vol6 - значение 12.

    В приведенной выше программе заданы две имени перечислимого типа: days (дни) и sex (пол). Это пока шаблоны. А на их основе определены собственно "рабочие" перечислимые переменные (т. е. те, с которыми и надо работать). Затем определенным таким образом переменным можно присваивать значения элементов перечислимых множеств и сравнивать их.

    Булев тип данных bool. Переменные этого типа могут принимать только два значения: false (ложь) и true (истина). Они используются для проверки логических выражений. Числовые значения false (ложь) и true (истина) заранее предопределены: значение false численно равно нулю, а значение true - единице. Эти так называемые литералы (постоянные символьные значения) сами выступают в роли переменных - им можно присваивать значения (соответственно ноль и единицу).

    Вы можете преобразовать некоторую переменную типа bool в некоторую переменную типа int. Такое числовое преобразование устанавливает значение false равным нулю, а значение true - единице.

    Вы можете преобразовать перечислимые и арифметические типы в переменные типа bool: нулевое значение преобразовывается в false, а ненулевое - в true.

    Существует одноименная функция bool(), которая преобразует арифметические типы в булевы.

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

void main()
{
  //проверка преобразований типов int, float в bool
  int   i = 2;
  bool  b = i; 
  float j = 2.2; 
  bool  a = bool(j); 
  j = 0.0;
  a = bool(j);
}

    На следующем шаге мы рассмотрим константы.




Предыдущий шаг Содержание Следующий шаг