Cout « а « endl ; // выводится 2

Введение. Типы данных

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

Типы и Описания

Данные (data), необходимые для работы программы, хранятся в памяти компьютера; каждая область памяти имеет однозначно определенный адрес, на который ссылается программист, когда хочет сохранить или прочесть данные. Адрес расположения данных в памяти – это двоичное число в машинном коде.

В языках высокого уровня для того, чтобы назвать область памяти, используются идентификаторы, а компилятор транслирует имена в соответствующие адреса. Языки высокого уровня освобождают программиста от необходимости определять действительное расположение данных в памяти компьютера, как это делается, например в ассемблере. Каждый элемент данных (каждое имя и каждое выражение) должен принадлежать к определенному типу данных (data type), который определяет все операции, которые могут над ними производиться. Например, описание

 
  Cout « а « endl ; // выводится 2 - student2.ru

определяет, что inch имеет тип int, то есть, inch является целой переменной.

Таким образом, тип данных определяет, каком виде данные представлены в компьютере, сколько байтов они занимают в оперативной памяти, а также — какие преобразования компьютер может к ним применять. Некоторые типы данных известны компилятору Языка высокого уровня — их называют встроенными. Встроенные типы данных подразделяются на базовые (простые) и производные типы данных. Помимо встроенных типов программист может определять свои собственные типы — их называют пользовательскими (типы класса).

Концепция типов данных является важнейшей стороной любого языка программирования. Схема типов данных для языка Си++ представлена на рис. 42.

Cout « а « endl ; // выводится 2 - student2.ru

Данные в программе могут быть представлены константами и переменными, которые имеют идентификатор, тип и значение. Данные представляются описаниями.

Описание - это оператор, который вводит имя в программе. Описание задает тип этого имени. Тип определяет правильное использование имени или выражения. Для целых определены такие операции, как +, -, * и /. После того, как включен файл stream.h, объект типа int может также быть вторым операндом <<, когда первый операнд ostream.

Тип объекта определяет не только то, какие операции могут к нему применяться, но и смысл этих операций. Например, оператор

Cout « а « endl ; // выводится 2 - student2.ru
правильно обрабатывает четыре входных значения различным образом. Строки печатаются буквально, тогда как целое inch и значение с плавающей точкой inch*2.54 преобразуются из их внутреннего представления в подходящее для человеческого глаза символьное представление.

Константа (constant) — именованная область памяти компьютера. Значение константы во время выполнения программы никогда не меняется.

Переменная (variable) — именованная область памяти компьютера. В ячейки памяти могут помещаться разные значения переменной, но в каждый момент времени выполнения программы это может быть только единственное значение. В отличие от константы, значение переменной изменяется при работе программы в зависимости от применяемых к ней операций.

Cout « а « endl ; // выводится 2 - student2.ru Значение (value) — конкретное содержание переменной, константы или выражения. Всегда должно принадлежать области допустимых значений, которая определяется типом переменной, константы или выражения.

 
  Cout « а « endl ; // выводится 2 - student2.ru

Размер элемента данных (item size) — длина переменной или константы, измеряемая в байтах, которая определяет величину области памяти, занимаемую переменной или константой для хранения своего значения.

В C++ имеются простые базовые типы данных, изображенные на рис. 1.1.

Основные Tипы

Основными типами, наиболее непосредственно отвечающими средствам аппаратного обеспечения, являются следующие:

char short int long float double

Первые четыре типа используются для представления целых, последние два - для представления чисел с плавающей точкой. Переменная типа char имеет размер, естественный для хранения символа на данной машине (обычно, байт) и используется для представления в программе данных символьного типа. Переменная типа int имеет размер, соответствующий целой арифметике на данной машине (обычно, слово), этот тип служит для данных целого типа и может быть модифицирован при помощи ключевых слов short и long.

Диапазон целых чисел, которые могут быть представлены типом int, зависит от его размера. Для типов данных char, int, short и long можно ограничиться представлением не отрицательных значений при помощи ключевого слова unsigned, которое должно предшествовать названию типа. Типы без знака изменяют диапазон допустимых значений, исключая отрицательные числа. Освободившийся знаковый разряд расширяет диапазон допустимых положительных значений.

В C++ размеры измеряются в единицах размера данных типа char, поэтому char по определению имеет размер единицы. Соотношение между основными типами можно записать так:

 
  Cout « а « endl ; // выводится 2 - student2.ru

К базовым целым типам относится и тип bool, служащий для представления логических данных, которые могут принимать значения true (истина) и false (ложь).

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

К основным типам можно применять прилагательное const. Это применение дает тип, имеющий те же свойства, что и исходный тип, за исключением того, что значение переменных типа const не может изменяться после инициализации.

const float pi = 3.14;
const char plus = '+';

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

Элементы языка Си++

Алфавит. В алфавит языка Си++ входят:

• латинские буквы: от а до z (строчные) и от A до Z (прописные);

• десятичные цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;

• специальные символы: " { } , I [ ] ( ) + - / % \ ; ' : ? < = > _ ! & # ~ ^ . *

К специальным символам относится также пробел. В комментариях, строках и символьных константах могут использоваться и другие знаки (например, русские буквы).

Комбинации некоторых символов, не разделенных пробелами, интерпретируются как один значимый символ. К ним относятся:

++ — == && || «»>=<=+=-=*=/=?: /**///

В Си++ в качестве ограничителей комментариев могут использоваться как пары символов /* и */, принятые в языке Си, так и символы //, используемые только в Си++. Признаком конца такого комментария является невидимый символ перехода на новую строку. Примеры:

/* Это комментарий, допустимый в Си и Си++ */

// Это строчный комментарий, используемый только в Си++

Из символов алфавита формируются лексемы — единицы текста программы, которые при компиляции воспринимаются как единое целое и не могут быть разделены на более мелкие элементы. К лексемам относятся идентификаторы, служебные слова, константы, знаки операций, разделители.

Идентификаторы. Последовательность латинских букв, цифр, символов подчеркивания (_), начинающаяся с буквы или символа подчеркивания, является идентификатором. Например:

В12 rus hard_RAM_disk MAX ris_32

В отличие от Паскаля в Си/Си++ различаются прописные и строчные буквы. Это значит, что, например, flag, FLAG, Flag, FlAg — разные идентификаторы.

Ограничения на длину идентификатора могут различаться в разных реализациях языка. Компиляторы фирмы Borland позволяют использовать до 32 первых символов имени. В некоторых других реализациях допускаются идентификаторы длиной не более 8 символов.

Служебные (ключевые) слова. Как и в Паскале, служебные слова в Си — это идентификаторы, назначение которых однозначно определено в языке. Они не могут быть использованы как свободно выбираемые имена. Полный список служебных слов зависит от реализации языка, т. е. различается для разных компиляторов. Однако существует неизменное ядро, которое определено стандартом Си++. Вот его список:

Cout « а « endl ; // выводится 2 - student2.ru

Дополнительные к этому списку служебные слова приведены в описаниях конкретных реализаций Си++. Некоторые из них начинаются с символа подчеркивания, например: ^export, _ds, _AH и др. Существуют служебные слова, начинающиеся с двойного подчеркивания. В связи с этим программисту не рекомендуется использовать в своей программе идентификаторы, начинающиеся с одного или двух подчеркиваний, во избежание совпадения со служебными словами.


Резюме

Тип является основной характеристикой объекта и функции. Тип определяет, что и как следует делать со значениями объектов и функций. Значение функции выполняется, значение константы читается, константой переменной модифицируется. Тип определяет структуру и размеры объекта, диапазон и способы интерпретации его значения, множество допустимых операций.

Поскольку конкретное значение может быть зафиксировано в области памяти, которая соответствует объекту определённого типа, можно также говорить о типе значения. Значения представляются выражениями. Поэтому имеет смысл также говорить и о типе выражения. Таким образом, тип оказывается важнейшей характеристикой языка.

Можно предположить существование языка с единственным типом объекта. Такой язык можно считать нетипизированным языком. Для нетипизированного языка характерен фиксированный размер объекта, единый формат хранения данных, унифицированные способы интерпретации значений.

Как ни странно, нетипизированный язык одинаково неудобен для решения задач в любой конкретной предметной области. К обработке символьной информации или решению сложных вычислительных задач транслятор нетипизированного языка относится одинаково. Для него все объекты одинаковые. Так что реализация алгоритмов сравнения символьных строк, вычисление значений тригонометрических функций, корректное прочтение и запись значений переменных и констант, способы интерпретации информации, применение разнообразных операций к данным (при анализе символьной информации бессмысленны операции умножения и деления) и многие другие проблемы оказываются исключительно проблемами программиста. Больше проблем - больше ошибок.

Здесь имеет смысл обратиться к приложениям, связанным с типизацией и контролем типов. В следующих разделах мы будем говорить о типах объектов. Типы функций будут рассмотрены позже.

1.3 Основные типы C++

Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.

В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). В принципе, эти диапазоны определяются конкретной реализацией. Обычно выбор этих характеристик диктуется эффективностью использования вычислительных возможностей компьютера. Зависимость языка от реализации создаёт определённые проблемы переносимости. C++ остаётся машинно-зависимым языком.

К целочисленным типам относятся типы, представленные следующими именами основных типов:

Char

Short

Int

Long

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:

Signed

Unsigned

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

Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

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

В ряде случаев модификаторы типа можно рассматривать как имена основных типов.

Здесь также многое определяется конкретной реализацией. В версиях Borland C++ данные типов, обозначаемых как signed, short и int в памяти занимают одно и то же количество байтов.

Особое место среди множества основных целочисленных типов занимают перечисления, которые обозначаются ключевым словом enum. Перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования. Их изучению будет посвящён специальный раздел.

Здесь также многое зависит от реализации. По крайней мере, для Borland C++ 4.5, основные характеристики целочисленных типов выглядят следующим образом:

Тип данных Байты Биты Min Max
signed char - 128
unsigned char
signed short -32768
enum -32768
unsigned short
signed int -32768
unsigned int
signed long -2147483648
unsigned long

К плавающим типам относятся три типа, представленные следующими именами типов, модификаторов и их сочетаний:

Float

Double

Long double

Как и ранее, модификатор типа входит в число имён основных типов.

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

297.7

2.977*10**2

E2

и ещё один пример…

0.002355

2.355*10**-3

E-3

В научной нотации слева от символа E записывается мантисса, справа - значение экспоненты, которая всегда равняется показателю степени 10.

Для хранения значений плавающих типов в памяти используется специальный формат представления вещественных чисел. Этот формат называется IEEE форматом.

Ниже представлены основные характеристики типов данных с плавающей точкой (опять же для Borland C++ 4.5):

Тип данных Байты Биты Min Max
float 3.4E-38 3.4E+38
double 1.7E-308 1.7E+308
long double 3.4E-4932 3.4E+4932

Подведём итог.

Имена типов данных и их сочетания с модификаторами типов используются для представления данных различных размеров в знаковом и беззнаковом представлении:

Char

Signed char

Unsigned char

Short

Signed short

Unsigned short

Signed

Unsigned

Short int

Signed short int

Unsigned short int

Int

Signed int

Unsigned int

Long

Signed long

Unsigned long

Long int

Signed long int

Unsigned long int

Все эти типы образуют множество целочисленных типов. К этому множеству также относятся перечисления. А вот сочетания имён типов и модификаторов для представления чисел с плавающей точкой:

Float

Double

Long double

Помимо основных типов в C++ существуют специальные языковые средства, которые позволяют из элементов основных типов создавать новые, так называемые производные типы.

К любой комбинации этих типов могут применяться арифметические операции:

+ (плюс, унарный и бинарный)
- (минус, унарный и бинарный)
* (умножение)
/ (деление)

А также операции сравнения:

== (равно)
!= (не равно)
< (меньше)
> (больше)
<= (меньше или равно)
>= (больше или равно)

Заметьте, что целое деление дает целый результат: 7/2 есть 3. Над целыми может выполняться операция % получения остатка: 7%2 равно 1.

При присваивании и арифметических операциях C++ выполняет все осмысленные преобразования между основными типами, чтобы их можно было сочетать без ограничений:

double d = 1;

int i = 1;

d = d + i;

i = d + i;

Самым коротким размером в байтах обладает тип bool, а самым длинным — long double. Язык C++ имеет оператор sizeof ( ) для определения количества байтов, занятых элементом программы.

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

Размер типа int и unsigned int зависит от размера слова операционной системы, в которой работает компилятор Си++. В 16-разрядных ОС (MS DOS) этим типам соответствуют 2 байта, в 32-разрядных (Windows) — 4 байта.

Таблица 4.1

Cout « а « endl ; // выводится 2 - student2.ru

Анализируя данные табл. 4.1, можно сделать следующие выводы:

• если не указан базовый тип, то по умолчанию подразумевается int;

• если не указан модификатор знаков, то по умолчанию подразумевается signed;

• с базовым типом float модификаторы не употребляются;

• модификатор short применим только к базовому типу int. Программисту, работавшему на Паскале, покажется странным, что тип char причислен к арифметическим типам. Ведь даже его имя указывает на то, что это символьный тип! В Си/Си++ величины типа char могут рассматриваться в программе и как символы, и как целые числа. Все зависит от контекста, т. е. от способа использования этой величины. В случае интерпретации величины типа char как символа ее числовое значение является ASCII-кодом. Следующий пример иллюстрирует сказанное.

char a= 6 5 ;

printf("%c",a);/*На экране появится символ А*/

printf("%d",a);/*На экране появится число 65*/

Символы "%c" являются спецификацией формата ввода/вывода символьных данных, а "%d" — спецификацией для целых чисел.

Константы простых типов

Объявление констант имеет форматы:

const тип идентификатор = значение ;

const тип идентификатор1 = значение1,..., идентификаторN = значениеN;

Используя первый формат, можно объявить одну константу, а второй — несколько констант одного типа (см. пример на листинге 1.1).

Идентификатор константы рекомендуется записывать прописными буквами.

< Листинг 1.1 Пример объявления констант разного типа>

const float F = 1.25 ;

const double D = 9.42478 ;

const long double LD = 1.7E+300 ;

const unsigned short X = 123 ;

const char A = 'a' ;

const char COPYA = A ;

const bool T = true ;

const char TRUE [ ] = "true" ;

const char* SAYING = "Slow and steady wins the race." ;

Константы с идентификаторами f, d и ld — это числа с плавающей точкой. Разница заключается в размере занимаемой памяти и точности представления, определяемой количеством знаков после запятой. Константа f занимает 4 байта, а тип float хранит значения с точностью до 7 знаков после запятой. Константы d и LD занимают 8 байтов. Точность типов double и long double одинаковая и составляет 15 знаков после запятой, но у типа long double шире диапазон допустимых значений.

Константа Х представляет целое число без знака. Использование перед типом ключевого слова unsigned указывает компилятору, что из диапазона изменения такого типа исключаются отрицательные числа.

Символьные константы а и copya имеют одно и то же значение символа а, но занимают разные ячейки памяти. Значение символьных констант заключается в апострофы.

Cout « а « endl ; // выводится 2 - student2.ru Константа Т имеет логический тип и значение true. Логический тип занимает 1 байт оперативной памяти и имеет всего два допустимых значения: true (истина) и false (ложь).

Константы true и saying объявлены как строковые константы. Значение строковой константы заключается в кавычки. В примере строковые константы объявляются разными способами: константа true при помощи символьного массива, а константа saying с помощью указателя на символьный тип.

Определение констант на стадии препроцессорной обработки программы. Еще одной возможностью ввести именованную константу является использование препроцессорной директивы #define в следующем формате:

#define <имя константы> <значение константы>

Например:

#define iMIN I

#define iMAX 1000

Тип констант явно не указывается и определяется по форме записи. В конце директивы не ставится точка с запятой.

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

X=iMAX-iMIN;

то в результате препроцессорной обработки он примет вид:

Х=1000-1;

При этом идентификаторы iMAX и iMIN не требуют описания внутри программы.

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

enum {A,B,C,D};

В результате имени А будет сопоставлена константа 0, имени В — константа l, C — 2, D — 3. По умолчанию значение первой константы равно нулю.

Для любой константы можно явно указать значение. Например:

enum {A=10,B,C,D};

В результате будут установлены следующие соответствия: А = 10, B = 11, C = 12, D = 13.

Возможен и такой вариант определения перечисления:

enum {А=10,В=20,С=35,D=100};

Если перечисляемому типу дать имя, то его можно использовать в описании переменных. Например:

enum metal {Fe,Co,Na,Cu,Zn);

metal Metl,Met2;

Здесь идентификатор metal становится именем типа. После такого описания в программе возможны следующие операторы:

Metl=Na; Met2=Zn;

< Примечание >

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

Переменные простых типов

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

тип идентификатор ;

тип идентификатор1, ..., идентификаторN ;

тип идентификатор = значение ;

тип идентификатор1 = значение1, ..., идентификаторN = значениеN ;

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

Язык C++ допускает объявление переменной в любом месте программы, но перед первым ее использованием (листинг 1.2).

При выборе идентификатора переменной следует учитывать ее назначение в программе, чтобы программный текст читался легче.

< Листинг 1.2 Пример объявления переменных разного типа>

float sum = 0.0 ;

double average ;

unsigned char a ;

bool flag ;

short birthYear = 1703, calendarYear = 2006 ;

int m_capacity, j = 0 ;

long x, y, z ;

Переменные с идентификаторами sum и average объявлены как числа с плавающей точкой обычной и двойной точности, соответственно. Переменная sum инициализируется нулевым значением при объявлении.

При помощи идентификатора а объявлена символьная переменная без знака. Логическая переменная flag сможет принимать значения true или false.

Переменные birthYear, calendarYear, m_capacity, j, х, уиz— это целые числа. Типы для представления целых чисел short, int, long обеспечивают поддержку разных диапазонов изменения этих чисел. Первые две переменные и переменная j при объявлении инициализируются значениями.

Локальные переменные

Локальные переменные (local variables) — это переменные, которые могут быть использованы только в операторах того блока программы, где находится их объявление. Локальные переменные невидимы за пределами блока.

Локальная переменная может быть инициализирована при объявлении каким-либо значением. Это значение будет присваиваться переменной каждый раз при входе в блок. Если локальная переменная не инициализируется при объявлении, ее значение не определено.

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

Как правило, локальные переменные объявляются внутри функций. Функция рассматривается как блок программы, поэтому сохранить значение локальной переменной между вызовами функций невозможно. Сохранение значений между вызовами обеспечивают статические переменные, о которых несколько позднее.

< Листинг 1.3 Пример использования локальных переменных>

int а = 2 ; // локальная переменная а из внешнего блока

Глобальные переменные

Глобальные переменные (global variables) — это переменные, которые доступны из любой части программы и могут быть использованы где угодно, то есть их областью действия является вся программа.

Глобальная переменная должна объявляться вне всех функций один раз.

Глобальная переменная, как и локальная, может быть инициализирована при объявлении каким-либо значением. Это значение может быть изменено в процессе работы программы в любой функции или блоке. Значение неинициализированной глобальной переменной равно нулю (листинг 1.4).

< Примечание >

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

<Листинг 1.4. Пример использования глобальных переменных>

#include <iostream>

using namespace std ;

Void main ( )

{

Int main ( )

{

int x = 3 ;// x - локальная переменная

n = 2 ;// n - глобальная переменная

cout « n * x « endl ; // выводится 6(2*3)

int n = 7 ; // n - локальная переменная

// локальная переменная п скрывает глобальную переменную n

cout « n * х « endl ; // выводится 21 (7*3)

// разрешается видимость глобальной переменной :: n

cout « :: n * х « endl ; // выводится 6 (2*3)

return 0 ;

}

Глобальная переменная n получает значение 2 внутри функции main (). Значение сохраняется. Далее в программе объявляется локальная переменная с точно таким же идентификатором n и одновременно инициализируется значением 7. Эта переменная скрывает глобальную переменную, поэтому в вычислении произведения используется значение локальной переменной n. В последней строке программы используется оператор разрешения области видимости :: n, который открывает доступ к значению глобальной переменной n. В результате на экран выводится произведение, для вычисления которого используется глобальная переменная.

Производные Типы

Вот операции, создающие из основных типов новые типы:

* указатель на
*const константный указатель на
& ссылка на
[] вектор*2
() функция, возвращающая

Например:

char* p // указатель на символ
char *const q // константный указатель на символ
char v[10] // вектор из 10 символов

Cout « а « endl ; // выводится 2 - student2.ru
Все вектора в качестве нижней границы индекса имеют ноль, поэтому в v десять элементов: v[0] ... v[9]. Переменная указатель может содержать адрес объекта соответствующего типа:

Унарное & является операцией взятия адреса.

Введение. Типы данных

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

Типы и Описания

Данные (data), необходимые для работы программы, хранятся в памяти компьютера; каждая область памяти имеет однозначно определенный адрес, на который ссылается программист, когда хочет сохранить или прочесть данные. Адрес расположения данных в памяти – это двоичное число в машинном коде.

В языках высокого уровня для того, чтобы назвать область памяти, используются идентификаторы, а компилятор транслирует имена в соответствующие адреса. Языки высокого уровня освобождают программиста от необходимости определять действительное расположение данных в памяти компьютера, как это делается, например в ассемблере. Каждый элемент данных (каждое имя и каждое выражение) должен принадлежать к определенному типу данных (data type), который определяет все операции, которые могут над ними производиться. Например, описание

 
  Cout « а « endl ; // выводится 2 - student2.ru

определяет, что inch имеет тип int, то есть, inch является целой переменной.

Таким образом, тип данных определяет, каком виде данные представлены в компьютере, сколько байтов они занимают в оперативной памяти, а также — какие преобразования компьютер может к ним применять. Некоторые типы данных известны компилятору Языка высокого уровня — их называют встроенными. Встроенные типы данных подразделяются на базовые (простые) и производные типы данных. Помимо встроенных типов программист может определять свои собственные типы — их называют пользовательскими (типы класса).

Концепция типов данных является важнейшей стороной любого языка программирования. Схема типов данных для языка Си++ представлена на рис. 42.

Cout « а « endl ; // выводится 2 - student2.ru

Данные в программе могут быть представлены константами и переменными, которые имеют идентификатор, тип и значение. Данные представляются описаниями.

Описание - это оператор, который вводит имя в программе. Описание задает тип этого имени. Тип определяет правильное использование имени или выражения. Для целых определены такие операции, как +, -, * и /. После того, как включен файл stream.h, объект типа int может также быть вторым операндом <<, когда первый операнд ostream.

Тип объекта определяет не только то, какие операции могут к нему применяться, но и смысл этих операций. Например, оператор

Cout « а « endl ; // выводится 2 - student2.ru
правильно обрабатывает четыре входных значения различным образом. Строки печатаются буквально, тогда как целое inch и значение с плавающей точкой inch*2.54 преобразуются из их внутреннего представления в подходящее для человеческого глаза символьное представление.

Константа (constant) — именованная область памяти компьютера. Значение константы во время выполнения программы никогда не меняется.

Переменная (variable) — именованная область памяти компьютера. В ячейки памяти могут помещаться разные значения переменной, но в каждый момент времени выполнения программы это может быть только единственное значение. В отличие от константы, значение переменной изменяется при работе программы в зависимости от применяемых к ней операций.

Cout « а « endl ; // выводится 2 - student2.ru Значение (value) — конкретное содержание переменной, константы или выражения. Всегда должно принадлежать области допустимых значений, которая определяется типом переменной, константы или выражения.

 
  Cout « а « endl ; // выводится 2 - student2.ru

Размер элемента данных (item size) — длина переменной или константы, измеряемая в байтах, которая определяет величину области памяти, занимаемую переменной или константой для хранения своего значения.

В C++ имеются простые базовые типы данных, изображенные на рис. 1.1.

Основные Tипы

Основными типами, наиболее непосредственно отвечающими средствам аппаратного обеспечения, являются следующие:

char short int long float double

Первые четыре типа используются для представления целых, последние два - для представления чисел с плавающей точкой. Переменная типа char имеет размер, естественный для хранения символа на данной машине (обычно, байт) и используется для представления в программе данных символьного типа. Переменная типа int имеет размер, соответствующий целой арифметике на данной машине (обычно, слово), этот тип служит для данных целого типа и может быть модифицирован при помощи ключевых слов short и long.

Диапазон целых чисел, которые могут быть представлены типом int, зависит от его размера. Для типов данных char, int, short и long можно ограничиться представлением не отрицательных значений при помощи ключевого слова unsigned, которое должно предшествовать названию типа. Типы без знака изменяют диапазон допустимых значений, исключая отрицательные числа. Освободившийся знаковый разряд расширяет диапазон допустимых положительных значений.

В C++ размеры измеряются в единицах размера данных типа char, поэтому char по определению имеет размер единицы. Соотношение между основными типами можно записать так:

 
  Cout « а « endl ; // выводится 2 - student2.ru

К базовым целым типам относится и тип bool, служащий для представления логических данных, которые могут принимать значения true (истина) и false (ложь).

Для использования в программе данных с плавающей точкой существует тип double, который может быть модифицирован при помощи ключевого слова long. В целом, пр

Наши рекомендации