- •Преобразование типов указателей
- •Операторы определения адреса и обращения по адресу
- •Указатели на константы и константные указатели
- •Арифметические действия с указателями
- •Одномерные и многомерные массивы.
- •Строки символов. Основные функции для работы со строками.
- •Перечисление.
- •Структура.
- •Объединения.
- •Битовые поля.
- •Тип данных bool. Тип данных wchar_t.
- •Способы передачи параметров в подпрограммы.
- •Операторы распределения памяти.
- •Объявление typedef.
- •Оператор sizeof.
- •Передача аргументов по умолчанию.
- •Встроенные функции.
- •Определение пространства имён.
- •Оператор разрешения области видимости.
- •Объявление «using». Директива «using». Псевдонимы.
- •Механизм обработки исключений.
- •Вложенные исключения.
- •Определение класса.
- •Указатель this. Спецификаторы доступа к членам класса.
- •«Друзья» класса.
- •Конструктор класса. Список инициализации.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Явные конструкторы.
- •Деструкторы.
- •Встроенные функции–члены класса. Статические члены класса.
- •Функции-члены класса с квалификаторами const и volatile.
- •Вложенные классы. Локальные классы.
- •Общие правила перегрузки операторов.
- •Перегрузка оператора присваивания.
- •Оператор индексирования [].
- •Перегрузка бинарных операторов.
- •Составные операторы присваивания.
- •Оператор вызова функции.
- •Операторы преобразования типов (конверторы).
- •Структура данных – стек.
- •Структура данных – очередь.
- •Деревья.
- •Наследование
- •Доступ к членам наследуемого класса
- •Конструкторы, деструкторы и наследование
- •Наследование и присваивание.
- •Виртуальные функции.
- •Полиморфизм и позднее связывание.
- •Передача аргументов по умолчанию в виртуальные функции.
- •Виртуальные деструкторы.
- •Абстрактные классы.
- •Множественное наследование.
- •Виртуальное наследование.
Операторы распределения памяти.
В языке имеется 2 типа объектов: статические и динамические.
Под статические объекты память выделяется во время компиляции программы и её размер не может быть в дальнейшем изменён.
int c; //4 байта
int c[10]; //10 по 4 байта
char t; //1 байт
char t[10]; //10 по 1 байту
Динамические – объекты, память под которые выделяется в процессе выполнения программы. Память выделяется из кучи. Для выделения памяти, а также для возвращения выделенной памяти обратно в кучу используются операторы распределения памяти: new и delete.
new тип,
где тип является именем встроенного или определённого программистом типа данных.
delete указатель,
где указатель должен указывать на объект, под который предварительно была выделена память с помощью оператора new.
Наиболее часто эти операторы используются для динамического выделения памяти массивам и строкам. Пример динамической переменной:
int *p;
p = new int;
*p = 10;
Динамический массив:
int *p;
p = new int[10];
Динамические строки:
char *st;
st = new char[20];
Объявление typedef.
Существуют типы данных или типы, определённые пользователем, можно переименовывать с помощью объявления typedef. Имеет формат:
typedef имя_типа список_идентификаторов
typedef – ключ-слово; имя_типа является именем существующего типа данных или типа, определённого пользователем; списко_идентификаторов содержит новые имена существующего типа данных, которые перечисляются через запятую.
Подобное переименование используется с целью придания именам типов более осмысленных названий:
typedef salary;
salary s = 1000;
Можно определить синонимы для массива:
typedef int arr[10];
arr a;
Оператор sizeof.
Для определения длины как встроенных типов данных, так и типов данных, определённых пользователем, используется оператор sizeof, который имеет синтаксис:
sizeof выражение
или
sizeof (тип)
Оператор sizeof возвращает целочисленную константу без знака, которая равна длине операнда в байтах. Не допускаются операнды, которые имеют тип: битовые поля, функции, тип void, массивы неопределённого размера, перечисление, структура или объединение с неопределёнными элементами.
Если операндом оператора sizeof является массив или структура, то в результате получаем длину этого массива или структуры:
int n = 0;
double d = 0;
char c = ‘c’;
char a[10] = “array”;
printf (“%d”, sizeof n); //4
printf (“%d”, sizeof d); //8
printf (“%d”, sizeof a); //10
printf (“%d”, sizeof (int)); //4
Передача аргументов по умолчанию.
В прототипе функции или в её определении можно указать значения, которые задаются параметром по умолчанию. В этом случае, если при вызове функции некоторые или все аргументы пропущены, то компилятор подставит вместо них значения, заданные по умолчанию. Если некоторый параметр имеет значение по умолчанию, то значения по умолчанию должны иметь также все параметры, которые расположены после него. Соответственно если при вызове функции какой-то аргумент опускается, то должны опускаться и все аргументы после него:
# include <stdio.h>
void print (int i; int j = 1; int k = 2)
{printf (“%d\n%d\n%d\n”, i, j, k);}
void main ()
{print (5, 7, 9); //5, 7, 9
print (0); //0, 1, 2
print (1,3); //1, 3, 2
}