Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OOP_C++ / 02

.htm
Скачиваний:
23
Добавлен:
02.02.2015
Размер:
32.57 Кб
Скачать

02 - Типы данных. Объявления и определения. Выражения и операции Содержание     Предыдущее занятие     Следующее занятие

Занятие 02 Типы данных. Объявления и определения. Выражения и операции 1 Базовые типы данных и константные величины Базовые типы данных объединены в две группы

данные целого типа

данные с плавающей точкой (вещественные).

Данные целого типа могут быть обычными целыми со знаком (signed) и целыми без знака (unsigned). По числу разрядов, используемых для представления целой величины (диапазону значений) различают обычные целые (int), короткие целые (short int) и длинные целые (long int). Символьные данные (char) также рассматриваются как целые и могут быть со знаком и без знака. В 32-битных операционных системах значение типа short занимает 2 байта, а long - 4 байта (как и int).

Константы целого типа записываются как последовательности десятичных цифр. Тип константы зависит от числа цифр в записи константы и может быть уточнен добавлением в конце константы букв L или l (тип long), U или u (тип unsigned) или их сочетания. Целые константы могут записываться в восьмеричной системе счисления, в этом случае первой цифрой должна быть цифра 0, число может содержать только цифры 0 ... 7. Целые константы можно записывать и в шестнадцатиричной системе счисления, в этом случае запись константы начинается с символов 0x или 0X. Для обозначения цифр сверх 9 используются латинские буквы a, b, c, d, e и f (заглавные и строчные)

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

'\n' - новая строка, '\t' - горизонтальная табуляция, '\v' - вертикальная табуляция, '\r' - перевод каретки, '\f' - перевод страницы, '\a' - звуковой сигнал, '\'' - одиночная кавычка (апостроф), '\"' - двойная кавычка, '\\' - обратная косая черта. Вещественные числа могут быть значениями одного из трех типов: float, double, long double. Диапазон значений каждого из этих типов зависит от используемой системы программирования. Константы вещественных типов могут записываться в форме с плавающей точкой или экспоненциальной формате и по умолчанию имеют тип double. При необходимости тип константы можно уточнить, записав в конце суффикс f или F для типа float, суффикс l или L для типа long double.

Строковая константа состоит из символов, заключенных в двойные кавычки. Она может включать управляющие последовательности. Если между двумя константами ничего нет, кроме пробелов или переводов строки, компилятор объединяет их в одну. Если строковая константа не умещается на одной строке, ее можно прервать символом "\" и продолжить с начала следующей строки. Строковая константа представляется массивом символов, содержащего кроме символов строки завершающий символ с кодом 0 ('\0').

2 Объявления и определения В С++ переменная может быть объявлена и должна быть определена. Определение и объявление переменной различаются.

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

Объявление переменной объявляет, что переменная существует и определяется где-то в другом месте. Оно не является определением, не приводит к выделению памяти, а скорее уведомляет о том, что переменная определена где-то еще. Для объявления переменной без определения используется ключевое слово extern:

extern int k; // Переменная будет определена позже В программе может быть несколько объявлений одной и той же переменной. В общем объявления и определения переменных могут называться описаниями.

Переменная, или объект - это именованная область памяти, к которой имеется доступ в программе. Каждая переменная имеет определенный тип, который характеризует размер и расположение этой области памяти, диапазон значений, которые она может хранить, и набор операций, применимых к этой переменной. Таким образом, с переменной связываются ее значение, хранящееся в некотором месте памяти (rvalue, right value - правое значение, в присваивании стоит справа) и ее местоположение, т.е. адрес в памяти, по которому хранится ее значение (lvalue, left value - левое значение).

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

int a = 10; // Переменная целого типа с начальным значением 10 int b(10); // То же самое Если необходимо определить несколько переменных одного и того же типа, их идентификаторы записываются через запятую.

int x, y; // Две целых переменных с неопределенными значениями Определения могут располагаться в программе в любом месте, где допустим оператор.

Для представления константных величин могут использоваться именованные константы. Для определения константы перед именем типа следует ключевое слово const. Константы нельзя изменять в программе. Пример описания константы:.

const int k = 100; Константа должна быть инициализирована. Отсутствие инициализации вызовет ошибку компиляции.

При описании переменных и констант следует помнить, что пропущенное имя типа в описаниях по умолчанию означает int, например unsigned j эквивалентно unsigned int j, const m = 3 эквивалентно const int m = 3.

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

К арифметическим операциям относятся +, - (бинарные и унарные), *, / а также операция взятия остатка %. (применима только к целым). Если / применяется к целым, то результатом деления будет тоже целое, а остаток отбрасывается.

К операциям отношения сравнения на равенство == и на неравенство != и проверки > >= < . Каждая составная операция эквивалентна следующему присваиванию:

a = a op b; Например,

x += 5; эквивалентно

x = x + 5; Операция инкремента ++ обеспечивает увеличение целой переменной на единицу. Она имеет две формы префиксную и постфиксную. Префиксная форма обеспечивает увеличение переменной до того, как значение операции будет использовано, а постфиксная - после. Операция декремента -- обеспечивает уменьшение переменной на единицу и правила ее использования аналогичны.

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

sizeof(тип) sizeof выражение Например, следующими двумя способами можно определить размеры, занимаемые объектом типа double:

int size = sizeof(double); или

double d; int size = sizeof d; Операция "запятая" позволяет вместо одного выражения записывать несколько, разделенных запятыми. Эти выражения вычисляются слева направо. Типом и значением результата являются тип и значение правого (последнего) выражения. Например, запись

x = ( i = 0, j = i + 4, k = j); эквивалентна записи

i = 0; j = i + 4; k = j; x = k; Условная операция (тернарная) имеет следующий вид:

условие ? выражение1 : выражение2 Вначале вычисляется значение условия. Если оно истинно, то вычисляется выражение1 и его значение возвращается условной операцией. Если значение условия ложно, то вычисляется выражение2 и возвращается его значение.

Порядок применения унарных операций и операций присваивания "справа налево", а всех остальных операций - "слева направо".

Ниже приводится перечень операций с их относительным приоритетом.

:: Разрешение области видимости class_name::member :: Глобальное ::name . Выбор члена object.member -> Выбор члена pointer->member [] Индексирование pointer[expr] () Вызов функции expr(expr_list) () Структурное значение type(expr_list) typeid Идентификация типа typeid(type) typeid Идентификация типа во время выполнения typeid(expr) dynamic_cast Преобразование с проверкой во время выполнения dynamic_cast<type>(expr) static_cast Преобразование с проверкой во время компиляции static_cast<type>(expr) reinterpret_cast Преобразование без проверки reinterpret_cast<type>(expr) const_cast Константное преобразование const_cast<type>(expr) ++ Постфиксный инкремент lvalue++ -- Постфиксный декремент lvalue-- sizeof Размер объекта sizeof expr sizeof Размер типа sizeof(type) ++ Префиксный инкремент ++ lvalue -- Префиксный декремент --lvalue ~ Дополнение ~expr ! Логическое НЕ !expr - Унарный минус -expr + Унарный плюс +expr & Взятие адреса &lvalue * Косвенность *expr new Создание (размещение) new type delete Уничтожение (освобождение) delete pointer delete[] Уничтожение массива delete[] pointer () Приведение (преобразование) типа (type) expr .* Выбор члена косвенный object.pointer-to-member ->* Выбор члена косвенный pointer->pointer-to-member * Умножение expr * expr / Деление expr / expr % Остаток от деления expr % expr + Сложение (плюс) expr + expr - Вычитание (минус) expr - expr << Сдвиг влево expr << expr >> Сдвиг вправо expr >> expr < Меньше expr < expr <= Меньше или равно expr <= expr > Больше expr > expr >= Больше или равно expr >= expr == Равно expr == expr != Не равно expr != expr & Побитовое И (AND) expr & expr ^ Побитовое исключающее ИЛИ (OR) expr ^ expr | Побитовое ИЛИ (OR) expr | expr && Логическое И (AND) expr && expr || Логическое ИЛИ (OR) expr || expr ? : Условное выражение expr ? expr : expr = Простое присваивание lvalue = expr *= Умножение и присваивание lvalue *= expr /= Деление и присваивание lvalue /= expr %= Остаток и присваивание lvalue %= expr += Сложение и присваивание lvalue += expr -= Вычитание и присваивание lvalue -= expr <<= Сдвиг влево и присваивание lvalue <<= expr >>= Сдвиг вправо и присваивание lvalue >>= expr &= И и присваивание lvalue &= expr |= ИЛИ и присваивание lvalue |= expr ^= Исключающее ИЛИ присваивание lvalue ^= expr throw expr Генерация исключения throw expr expr , expr Запятая (последовательность) expr , expr  

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

4 Примеры программ Пример 1 Допустим, необходимо узнать коды некоторых символов. Можно реализовать программу, в которой пользователь вводит символ и получает его код. Эти действия можно выполнять в цикле. Условием завершения цикла должен быть ввод определенного символа, например, латинской буквы А. Для получения кода символа осуществляется преобразование символьного значения в целое, так как по умолчанию принято, что символы в поток выводятся в символьном, а целые - в числовом представлении:

// Программа получения кодов символов #include <iostream> using namespace std; int main(int argc, char* argv[]) { char c; do { cin >> c; // Ввод символа int i = c; // Занесение кода символа в целую переменную cout i; // Ввод целого значения char c = i; // Занесение в символьную переменную // Вывод десятичного и шестнадцатиричного кодов и символа: cout

Соседние файлы в папке OOP_C++