- •Базовое ядро языка Элементы программы.
- •Комментарии
- •Инструкция – выражение
- •Инструкция
- •Определение функции
- •Заголовок функции
- •Прототипы функций
- •Аргументы по умолчанию.
- •Перегрузка функций
- •Встраиваемые функции
- •Стек до блока Вошли в блок Вышли из блока
- •Индексирование
- •Int a [100]; одномерный массив
- •Int b [3][5]; двухмерный массив
- •Int c [7][9][2]; трехмерный массив
- •Передача массивов функциям
- •Объявления ссылок и вызовов по ссылке
- •Функции-члены класса
- •Доступ: закрытый и открытый
- •Область видимости класса
- •Оператор разрешения области видимости ::
- •Вложенные классы
- •Статические члены данных
- •Указатель this
- •Функции-члены типа static и const.
- •Изменчивость (mutable)
- •Создание и уничтожение объектов
- •Классы с конструкторами
- •Конструкторы как преобразования
- •Создание динамического стека
- •Классы с деструкторами
- •Пример: динамически размещаемые строки
- •Ad hoc полиморфизм
- •Алгоритм выбора перегруженной функции
- •Перегрузка операторов
- •Перегрузка бинарных операторов
- •Перегрузка операторов присваивания и индексирования
- •Перегруженные операторы ввода-вывода « и »
- •Перегрузка оператора ( ) для индексирования
- •Операторы указателей
- •Указатель на член класса
- •Перегрузка new и delete
- •Наследование.
- •Методология объективно-ориентированного проектирования
- •Виртуальные функции
- •Абстрактные базовые классы
Базовое ядро языка Элементы программы.
Набор символов. Прописные и строчные буквы: a,b,…,z, A,…,Z
Цифры: 0,1,…,9!!!Операторы: *, +, =…!!Знаки пунктуации: ; , ’ … “
Лексемы – наборы символов, распознаваемых компилятором (базовый словарь языка). ключевые слова!идентификаторы,литералы,операторы,знаки пунктуации
Комментарии
/* многострочный или однострочный комментарий */
// комментарий до конца строки
# include < iostream.h > // заголовочный файл
Ключевые слова – четко определенные, зарезервированные слова, имеющие конкретный смысл в языке СИ++.Например, int, long, public, , for, do, class,…
Идентификаторы – последовательность букв, цифр и символов подчеркивания. Идентификатор не может начинаться с цифры. Прописные и строчные буквы различаются. Длина до 31 символа в большинстве систем (вообще не ограничена).
Литералы – постоянные значения, существующие для каждого собственного типа С++. Литералы: символьные, целые, вещественные, строковые константы.
Примеры литералов:5 // целая константа 5U // u или U означает unsigned (беззнаковая) 5L // l или L означает long (длинная)
// целая константа в восьмеричном виде
0x5 // целая константа в шестнадцатиричном виде
true // булевская (логическая) константа
// константа с плавающей точкой, трактируемая как double
5.0F // f или F (float) константа с плавающей точкой,// одинарной точности
‘\ n’ // символьная константа – управляющая последовательность
// (означает переход на новую строку)
Символьные литералы представляются в виде ‘символ’
‘A’ // прописная буква А (код 65)
‘\ 0’ // нулевой символ – символ конца строки (код 0)
‘+’ //символ оператора сложения
Символьные константы, заданные escape – последовательностями:
‘\ a’ - звуковой сигнал ( alert ) ‘\\’ - обратная косая черта ( back slash )
escape – последовательности могут использоваться в строковых литералах.
Строковые литералы – static char [ ].
Строковый литерал хранится в памяти, как последовательность символов, заканчивающаяся символом с кодом 0. “a” // два байта - а, 0 (\а и \0)
“1 \\” // четыре байта ’1’ ’ ’ ’\\’ ’\0’- пробел ‘\” ” / два байта ’ ” ’ ’\0’
Строковые литералы, разделенные white space пробельными символами понимаются как одна строка.“ Это одна строка, ” “ так как она разделена ”
Литералы с плавающей точкой.
3.14f 1.234F// константы с плавающей точкой// и одинарной точностью
0.1234567// с двойной точностью
0.123456789L// длинная с двойной точностью 3. 3.0 0.3Е1 300е-2// всё это 3.0 с двойной точностью.
Операторы (или операции).
+, - , *, / , % // арифметические,,=, +=, *=// присваивания.… и т.д.
Знаки пунктуации: круглые и фигурные скобки, двоеточие, точку с запятой и т.д Ввод – вывод в СИ++.
Стандартный заголовочный файл iostream.h.
Библиотека iostream перегружает операторы побитового сдвига.
<< // поместить в выходной поток >> // считать с входного потока
Потоки: cout // стандартный поток вывода (“экран”)
cin // стандартный поток ввода (“клавиатура”) cerr // стандартный поток
Использование потоков аналогично инструкции присваивания по работе со значениями и переменными.
int i;
double x; cout << “\n Введите число с двойной точностью: ”; cin >> x;
cout << “\n Введите положительное целое: ”; cin >> i;
if (i<1) cerr << “ошибка, i= ” << i << end l;
cout << “ i * x = ” << i * x;
end l (манипулятор) очищает поток и добавляет новую строку.
Простые ( собственные ,предопределенные )типы данных.
Эти типы имеют набор значений и представление,
привязанные к низкоуровневой архитектуре ЭВМ, на которой работает компилятор.
Тип характеризует:1)Форму представления;2) Диапазон значений;
3) Допустимые операции, включая преобразование типа.
Для определения количества байт используется оператор sizeof (для типа или объекта) .
cout << sizeof (int) << ‘< =’ << sizeof (long) <<endl
bool 1byte false, true,,, char 1b -128...127 diapason primer ’A’ ’!’,,,,, signed char 1b - 128...127 20,,,,,unsigned char 1b === 0...255== 200,,,,, int == 2== - 32768...32767== 200,,,,,,, float 4 ===3.4E-38...3.4E+38 == 2.35;;;;;1.3E+10,,,,,,, double=== 8== 1.7E-308...1.7E+308 == 12.354
-1.7E-308...-1.7E+308 -78.35444
Объявление и инициализация
Объявление переменной связывает имя переменной с типом.
Объявление переменной является и определением ,если обеспечивается выделение памяти под переменную. Определение может быть с инициализатором .
Для простых переменных это выглядит так тип идентификатор = выражение
Инициализировать можно при помощи произвольного выражения, при условии, что все переменные и функции определены.Объявления могут встречаться в любом месте блока.
Традиционные преобразованияЛюбое арифметическое выражение х + y имеет тип и значение, если обе переменные одного типа, то и результат будет того же типа, если хватает места под значение short + short int , если результат больше short.
Автоматическое преобразование выражения [2].
1Все bool,char,short или enum преобразуются до int. Целые типы, которые не могут быть представлены как int , повышаются до unsigned.
2Если после первого шага выражение остается смешанным, то операнд более низкого типа повышается до более высокого типа и значение выражения получает этот тип.
int < unsigned < long < unsigned long < float < double < long double
Выражения и операторы
Перечислим операторы в порядке понижения приоритетов операций.
Операция Название \ Пример \ Порядок
: : Глобальная об- : : name слева направо
ласть видимости
: : Область види мости класса class name :: member
. Выбор элемента структуры или класса\ time.hour \ слева направо
[ ] Доступ по индексу массива pointer [expr]
( ) Вызов функции,конс труирование значения\ expr(expr_lst)\ type(expr_lst)
+ + Постфиксный инкре мент (j = i ++;равнозначно j = i ; i = i + 1);\ lvalue ++
-- Постфиксный декре мент (j = i --;равнозначно j = i ; i = i - 1);\ lvalue --
typeid ( ) идентификация типа typeid ( type )
---во время выполнения преобразование с проверкой \typeid (expr)
--во время выполнения dynamic_cast < type>(expr)