Лекция 2 Структура С++
Алфавит С++ • Ключевые слова • Специальные символы и операторы • Идентификаторы (имена)
Ключевые слова asm auto bool break case catch char class const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while
Символы и операторы { : % <= |= && } ? ^ >= <<= || [ : : & += >>= ++ ]. | -= << -- #. * ~ *= >> , <: : > <% %> %: %: ## + ! /= == -> ( = %= != ->* %: ) * < ^= <=. . . ; / > &= >=
Идентификаторы – символьные имена меток, функций, переменных или типов. Правила именования: • Состоит только из букв латинского алфавита, цифр или символа ‘_’ • Начинается не с цифры • Не совпадает с ключевым словом
Типы данных Простые: • Логический тип • Символьный тип • Целые типы • Типы с плавающей точкой • Перечислимые типы • Пустой тип Адресные: • Указатели • Массивы • Ссылки Составные: • Структуры и классы • Объединения
Целые типы • Наименования типа [модиф. знака] [модиф. размера] int • Модификаторы знака signed, unsigned • Модификаторы размера short, long • Размеры sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) sizeof(N) = sizeof(signed N) = sizeof(unsigned N) Обычно sizeof(short) = 2 байта sizeof(int) = 4 байта sizeof(long) = 4 байта
Целые литералы Литерал типа – конструкция языка, задающая некоторое значение данного типа • Разрядность – десятичные ( 10, 11, 12, … ) – восьмеричные ( 012, 013, 014, … ) – шестнадцатеричные ( 0 x. A, 0 x. B, 0 x. C, … ) • Модификаторы размера и знака – постфикс U (unsigned) – постфикс L (long) – можно сочетать Пример: 3 U Пример: 12 L Пример: 34 UL
Символьный тип • Наименования типа [модиф. знака] char wchar_t • Модификаторы знака signed, unsigned • Размеры sizeof(char) ≤ sizeof(wchar_t) ≤ sizeof(long) Обычно sizeof(char) = 1 байт sizeof(wchar_t) = 2 байта
Символьные литералы Символьный литерал – символ, заключенный в одиночные кавычки, например ‘q’ или ‘ 8’ Специальные литералы: ‘n’ – перевод строки ‘t’ – табуляция Тип литерала ‘c’ – char L‘c’ – wchar_t ‘ ’ – нулевой литерал ‘\’ – обратный слэш
Логический тип • Наименование типа bool • Принимаемые значения true, false • Размер типа 1 ≤ sizeof(bool) ≤ sizeof(long) Обычно: 1 байт • Особенности bool c = 7 ; int n = true ; ( c равно ( n равно true ) 1 )
Типы с плавающей точкой • Наименования типа float, double, long double • Размеры sizeof(float) ≤ sizeof(double) ≤ sizeof(long double) Обычно sizeof(float) = 4 байта ( 7 дес. знаков) sizeof(double) = 8 байт (15 дес. знаков) sizeof(long double) = 10 байт (19 дес. знаков)* *Чаще встречается sizeof(long double) == sizeof(double) == 8
Литералы с плавающей точкой • Десятичный формат <целая часть>. <дробная часть>[модификатор] Пример: 12. 379 3. 141592 • Экспоненциальный формат <целая>. <дробная>e<степень>[модификатор] Пример: 1 e 5 1. 23 e-4 • Модификаторы 1. 27 – тип double 1. 27 F – тип float 1. 27 L – тип long double • Сокращенная запись. 5 12.
Пустой тип void • Является простым типом, но может являться только частью более сложного • Невозможно создать объект типа void • Означает «неопределенный тип» или «отсутствие типа» – функция, не возвращающая никакого значения void * x – указатель на данные неопределенного типа void f () {}
Перечисления enum { A, B, C, }; // A = 0 // B = 1 enum Numbers { One = 1, Two, Four = 4, }; // Two = 2 • Задают набор значений. Переменные этого типа могут принимать только значения из заданного списка • Значениями перечисления являются именованные константы. Им ставятся в соответствие целые числа, начиная с нуля. Соответствие может быть задано, в этом случае для следующих констант это значение увеличивается на 1. • Размер типа – достаточный для хранения численных эквивалентов значений, но не более sizeof(int) • Тип константы – имя перечисления (в примере тип A – безымянный, тип Two – Numbers)
Объявление переменных простых типов Формат объявления [модификаторы] <тип> <имя>[инициализатор]; Множественное объявление [модификаторы] <тип> <имя>[иниц. ], <имя> [иниц. ]; Инициализатор: = значение или (значение)
Примеры объявлений Полное объявление static const unsigned short int a = 10 ; static const unsigned int c = 8, b = 9 ; Неполные объявления int a ; float f = 1. 37 ; unsigned short int q ; char c ( ‘m’ ); Множественное объявление char b, r = ‘w’ ; Идентично char b ; char r = ‘w’ ;
Объявление перечислений Внутри базового типа enum { None, Half, Full } state ; С инициализацией enum { None, Half, Full } state = Half ; По имени типа enum States { None, Half, Full }; States state = Half ;
Синонимы типов Ключевое слово typedef перед объявлением вводит новое имя типа. typedef unsigned int uint ; typedef unsigned short int WORD ; Взаимозаменяемо с некоторыми конструкциями языка. enum States { None, Half, Full }; typedef enum { None, Half, Full } States; Является синонимом типа, а не новым типом!