- •Вопросы к экзамену по дисциплине Программирование. 2012 год.
- •Директивы препроцессора #include, #define
- •Выражения. Классификация выражений. Правила вычисления выражений.
- •Классы памяти. Определение, время существования, область действия, инициализация.
- •Массивы. Объявление, инициализация, индексирование. Одномерные, двумерные массивы.
- •Инициализация массива
- •Двумерные массивы
- •Пользовательские типы данных: структуры. Битовые поля. Передача структур в функции
Директивы препроцессора #include, #define
Появление директив
#include <файл_1>
#include "файл_2"
...
#include <файл_n>
приводит к тому, что препроцессор подставляет на место этих ди-
ректив тексты файлов, соответственно, файл_1, файл_2,..., файл_n.
Если имя файла заключено в угловые скобки <>, то поиск файла
производится в специальном каталоге подстановочных файлов.
Обычно в этот каталог помещаются все файлы с расширением .h.
С помощью директивы #define, вслед за которой пишутся имя
макро и значения макро, оказывается возможным указать препро-
цессору, чтобы он при любом появлении в исходном файле на Си
данного имени макро заменял это имя на соответствующее значе-
ние макро. Макро могут иметь параметры.
Например, директива
#define pi 3.1415962
связывает идентификатор pi со значением 3.1415962.
Типы данных языка С++: концепция типов данных, основные типы данных, иерархия типов.
Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип.
Тип данных определяет:
внутреннее представление данных в памяти компьютера;
множество значений, которые могут принимать величины этого типа;
операции и функции, которые можно применять к величинам этого типа.
Исходя из этих характеристик, программист выбирает тип каждой величины, используемой в программе для представления реальных объектов. Обязательное описание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От выбора типа величины зависит последовательность машинных команд, построенная компилятором.
Все типы языка С++ можно разделить на простые (скалярные), составные (агрегатные) и функциональные. Простые типы могут быть стандартными и определенными программистом.
В языке С++ определено шесть стандартных простых типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов, а также массивов и указателей (указатель не является самостоятельным типом, он всегда связан с каким-либо другим конкретным типом), программист может вводить описание собственных простых или структурированных типов. К структурированным типам относятся перечисления, функции, структуры, объединения и классы.
Целые числа – это числа, которые используются для счета, на-
пример: 1, 2, 5, -21 и 752.
Числа с плавающей точкой могут содержать дробные разряды и
экспоненту (5.4567*1065
). Иногда их называют действительными
(вещественными) числами.
Текст состоит из символов (а, Z, !, 3) и строк ("Это просто про-
верка").
Указатели не хранят информацию; вместо этого каждый из них
содержит адрес памяти ЭВМ, в которой хранится информация.
Простые типы делятся на целочисленные типы и типы с плавающей точкой. Для описания стандартных типов определены следующие ключевые слова:
int (целый);
char (символьный);
wchar_t (расширенный символьный);
bool (логический);
float (вещественный);
double (вещественный с двойной точностью).
Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
short (короткий);
long (длинный);
signed (со знаком);
unsigned (без знака).
Иерархия -
double
float
long
int
short
Типы данных языка С++: концепция типов данных, преобразование и приведение типов.
Явное приведение осуществляется с помощью указания целевого типа данных (того, к которому нужно привести) в круглых скобках перед выражением:
double s = 2.71;
int t = (int) s;
cout << t << endl; // 2
cout << (int) 3.14 << endl; // 3
cout << (int) (2.5 + t) << endl; // 4
Приведение к целым числам от вещественных осуществляется путём отбрасывания целой части (не округлением).
В стандарте C++ предусмотрено несколько шаблонных функций для преобразования типов.
const_cast<> - предназначен для снятия модификаторов const и volatile. Александреску написал интересную статью о использовании volatile и const_cast для многопоточного программирования.
dynamic_cast<> - преобразовывает указатель на базовый тип к указателю на тип наследник, если объект действительно наследник, или вернет NULL в противном случае. При преобразовании используется RTTI (run-time type identification).
static_cast<> - шаблонная функция, для статического (т.е. на этапе компиляции) преобразования типов
Эта шаблонная функция позволяет char* преобразовать в int, A* в B*, не требуя каких-то родственных отношений между ними. reinterpret_cast