Чтение онлайн

на главную - закладки

Жанры

Шрифт:

cout «„ inch «« " in = " «« inch*2.54 «« « cm\n“;

правильно обрабатывает четыре входных значения различным образом. Строки печатаются буквально, тогда как целое inch и значение с плавающей точкой inch*2.54 преобразуются из их внутреннего представления в подходящее для человеческого глаза символьное представление.

В С++ есть несколько основных типов и несколько способов создавать новые. Простейшие виды типов С++ описываются в следующих разделах, а более интересные оставлены на потом.

1.3.1 Основные типы

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

char short int long float double

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

1=sizeof(char)«=sizeof(short) «= sizeof(int) «= sizeof(long) sizeof(float) «= sizeof(double)

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

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

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

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

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

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

А также операции сравнения: == (равно) != (не равно) « (меньше) » (больше) «= (меньше или равно) »= (больше или равно)

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

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

double d = 1; int i = 1; d = d + i; i = d + i;

1.3.2 Производные типы

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

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

– * одномерный массив. Это принятый термин (например, вектора прерываний), и мы сочли, что стандартный перевод его как «массив» затуманит изложение. (прим. перев.)

Например:

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

Все вектора в качестве нижней границы индекса имеют ноль, поэтому в v десять элементов: v[0]..v[9]. Функции объясняются в #1.5, ссылки в #1.9. Переменная указатель может содержать адрес объекта соответствующего типа:

char c; // ... p = amp;c; // p указывает на c

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

1.4 Выражения и операторы

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

1.4.1 Выражения

В С++ имеется большое число операций, и они будут объясняться там, где (и если) это потребуется. Следует учесть, что операции

~ (дополнение) amp; (И) ^ (исключающее ИЛИ) ! (включающее ИЛИ) «„ (логический сдвиг влево) “» (логический сдвиг вправо) применяются к целым, и что нет отдельного типа данных для логических действий.

Смысл операции зависит от числа операндов. Унарное amp; является операцией взятия адреса, а бинарное amp; – это операция логического И. Смысл операции зависит также от типа ее операндов: + в выражении a+b означает сложение с плавающей токой, если операнды имеют тип float, но целое сложение, если они типа int. В #1.8 объясняется, как можно определить операцию для типа, определяемого пользователем, без потери ее значения, предопределенного для основных и производных типов.

В С++ есть операция присваивания =, а не оператор присваивания, как в некоторых языках. Таким образом, присваивание может встречаться в неожиданном контексте, например, x=sqrt(a =3*x). Это бывает полезно. a=b=c означает присвоение c объекту b, а затем объекту a. Другим свойством операции присваивания является то, что она может совмещаться с большинством бинарных операций. Например, x[i+3]*=4 означает x[i+3]=x[i+3]*4, за исключением того факта, что выражение x[i +3] вычисляется только один раз. Это дает привлекательную степень эффективности без необходимости обращения к оптимизирующим компиляторам. К тому же это более кратко.

В большинстве программ на С++ широко применяются указатели. Унарная операция * разыменовывает* указатель, т.е. *p есть объект, на который указывает p. Эта операция также называется косвенной адресацией. Например, если имеется char* p, то *p есть символ, на который указывает p. Часто при работе с указателями бывают полезны операция увеличения ++ и операция уменьшения –. Предположим, p указывает на элемент вектора v, тогда p++ делает p указывающим на следующий элемент.

– * англ. dereference – получить значение объекта, на который указывает данный указатель. (прим. перев.)

Поделиться:
Популярные книги

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Альбион сгорит!

Зот Бакалавр
10. Герой Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Альбион сгорит!

Казачий князь

Трофимов Ерофей
5. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Казачий князь

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая

Газлайтер. Том 28

Володин Григорий Григорьевич
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 28

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Законы рода

Андрей Мельник
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Гранит науки. Том 2

Зот Бакалавр
2. Героями не становятся, ими умирают
Фантастика:
фэнтези
5.00
рейтинг книги
Гранит науки. Том 2

Я еще барон. Книга III

Дрейк Сириус
3. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще барон. Книга III

Офицер Красной Армии

Поселягин Владимир Геннадьевич
2. Командир Красной Армии
Фантастика:
попаданцы
8.51
рейтинг книги
Офицер Красной Армии