РљСЂРѕРјРµ обязательного объявления всех именованных объектов, РёС… еще необходимо инициализировать, то есть присвоить РёРј начальное значение. Некоторые объекты инициализируются РїСЂРё создании, некоторые – нет. РќРµ нужно инициализировать переменные Рё объекты, объявленные внутри функций. Р’ результате этого неинициализированные объекты РјРѕРіСѓС‚ иметь неопределенное значение. Рто неопределенное значение РїСЂРё его случайном использовании может дать непредсказуемый результат.
Можно объявлять несколько имен в одном операторе объявления. Следующая строка кода иллюстрирует эту возможность:
int С…, Сѓ, z;
В С++ при объявлении обязательно должен указываться тип. Основные типы, применяемые в C++, перечислены в следующем списке.
? Логический тип (bool).
? Символьный тип (char, wcharjt).
? Целые типы (short, int, long).
? Типы с плавающей точкой (float, double).
? Перечислимые типы (enum).
? Тип void используется для указания на отсутствие информации.
? Указатели.
? Массивы.
? Ссылки.
? Структуры данных и классы.
В файле MyExp.cpp роазмещены несколько объявлений. Например, в блоке 3 присутствует следующий фрагмент кода:
wchar_t *szStr; // объявлена переменная szStr,
//которая является указателем (*) на тип wchar_t
wchar_t mstr[256]; // объявлен массив mstr элементов типа wchar_t
//с количеством элементов 256
В блоке 4 помимо объявлений используется и инициализация переменных:
MSG msg; //объявлена переменная msg типа MSG
int rc = 0; // объявлена переменная rc с типом int,
// переменная была инициализирована значением 0
Базовые (фундаментальные) типы
Логический тип
Переменные этого типа РјРѕРіСѓС‚ принимать значение истина(true) или ложь(false). Рти переменные применяются для анализа выполнения некоторого условия. РџРѕ результатам проверки условия то или РёРЅРѕРµ действие будет или РЅРµ будет выполнено. Логическим значениям false Рё true соответствуют целочисленные значения 0 Рё 1. Логические значения РјРѕРіСѓС‚ принимать участие РІ арифметических операциях, РЅРѕ РїСЂРё присвоении РёРј целочисленных значений, РѕРЅРё Р±СѓРґСѓС‚ усекаться РґРѕ нуля или единицы. Рто иллюстрируется РІ рассматриваемом примере.
Упражнение 4.1 (продолжение)
13. В файле MyExp.h следует добавить в конец блока 4 объявление функции
void f2();.
14. В файле MyExp.сpp следует добавить в конец блока 3 объявления символьных массивов:
char mm[256]; charnn[32];
15. В конец файла MyExp.сpp нужно добавить блок 14, с кодом, который показан в листинге 4.5. Листинг 4.5
// Блок 14
void f2(){
bool i = false;
int j = 10;
mm[0] = ;
sprintf(nn, В«%dВ», j);
strcat(mm, " j = ");
strcat(mm, nn);
strcat(mm, В«nВ»);
i=7;
sprintf(nn, В«%dВ», i);
strcat(mm, " i = ");
strcat(mm, nn);
strcat(mm, В«nВ»);
j = j+i;
sprintf(nn, В«%dВ», j);
strcat(mm, " j+i = ");
strcat(mm, nn);
strcat(mm, В«nВ»);
mbstowcs(mstr, mm, 256);
szStr = mstr;
}
16.В Рзменить вторую РїРѕ счету ветвь case РІ блоке 11, как показано РІ листинге 4.6. Листинг 4.6
case 50: {
f2();
}
break;
РџР РМЕЧАНРР•. Каждый новый фрагмент РєРѕРґР° будет добавляться РІ новые ветви case оператора выбора switch.
Теперь можно запустить программу. Нажатие клавиши 2 на клавиатуре приведет к появлению в окне последовательности изменения значений переменных. Как и ожидалось, присвоение целочисленной переменной j значения 10 прошло без проблем. А вот присвоение значения 7 переменной i типа bool усекло значение 7 до единицы, и при сложении i и j результат получился равным 11, а не 17. Символьный тип
В переменной типа char может храниться один из символов, входящих в набор символов используемой реализации ОС. Для хранения символа отводится 8 бит, так что всего можно использовать 256 значений этого типа. Можно с достаточной уверенностью предположить, что в набор символов конкретной реализации входят цифры, 26 букв английского алфавита и некоторые основные знаки пунктуации. Все остальные предположения о составе символьного набора не могут считаться достоверными.
Каждая символьная константа имеет числовое значение, отображающее ее порядковый номер в символьном наборе. Тип char может быть как знаковым (signed char), так и беззнаковым (unsigned char). По умолчанию char трактуется как знаковый тип, поэтому если нужно получить беззнаковое преобразование, необходимо явно объявлять переменную типа unsigned char.
Для хранения символов больших наборов, таких как Unicode, используется тип wchar_t.
Символьные типы являются интегральными. Как и к логическим типам, к ним можно применять арифметические и логические операции. Кроме того, имеется ряд символьных констант, называющихся ESC-последовательностями, играющих особые роли при работе с символьными строками. Основные ESC-последовательности приведены в следующем списке.
'n' – новая строка,
't' – горизонтальная табуляция,
'v' – вертикальная табуляция,
'r' – перевод каретки,
'f' – перевод страницы,
'a' – звуковой сигнал,
' – одиночная кавычка (апостроф),
'" – двойная кавычка,
'\ – обратная косая черта.
Целые типы
К целочисленным типам относятся int, short int и long int. Вместо двух последних можно применять обозначения short и long. Кроме того, целочисленный тип может быть знаковым и беззнаковым – signed и unsigned. Обычный тип int всегда является знаковым. Если нужно получить беззнаковый тип, следует явно объявить переменную как unsigned. Объявление unsigned равнозначно объявлению unsigned int. Конкретное значение размеров переменной зависит от реализации ОС.