- •Абстрактные классы.
- •Аргументы функций по умолчанию.
- •Арифметические операции с указателями и с указателями на массивы.
- •Ввод-вывод в символьные массивы.
- •Виртуальные классы. Порядок вызова конструкторов и деструкторов.
- •Виртуальные функции.
- •Виртуальные функции-члены.
- •Виртуальный деструктор. Абстрактные классы.
- •Динамическая память. Указатели и массивы. Ссылочный тип.
- •Доступ к глобальным переменным, скрытым локальными переменными с тем же именем (оператор ::).
- •Доступ к членам базовых классов внутри производного класса.
- •Доступ к элементам массива. Вычисление размера массива. Многомерные массивы.
- •Дружественные классы и функции.
- •Закрытые, защищенные и открытые элементы класса.
- •Иерархия классов. Иерархия наследования классов.
- •Инициализация и разрушение (конструкторы и деструкторы).
- •Инициализация массивов по умолчанию. Явная инициализация массивов.
- •Инициализация безразмерных массивов
- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследовние
- •22.Использование new и delete на примере динамических массивов, стеков, очередей.
- •Указатель this
- •Указатели на структуру
- •Массивы структур
- •Классы и объекты. Класс как структура.
- •Классы. Спецификаторы доступа public, protected, private.
- •Константные (const) и изменяемые (mutable) члены класса.
- •Конструктор копирования для контейнерного класса.
- •Конструкторы и деструкторы.
- •Конструкторы и способы обращения к ним.
- •Логические операции. Инкремент и декремент. Арифметические операции.
- •Объявление переменной массива
- •Множественное наследование.
- •Модификатор константы. Модификатор volatile. Модификатор const
- •Модификатор volatile
- •Модификатор const
- •Модификатор volatile
- •Объединения: синтаксис и правила.
- •Объединения: создание простого объединения. Использование enum.
- •41. Объекты стандартного предопределенного потокового ввода-вывода cin, cout, cerr, clog.
- •Объявление переменных указателей. Простые операторы с указателями.
- •Оператор if. Оператор if-else. Вложенные операторы if-else. Оператор if-else-if.
- •If (условие_истинно) оператор; else оператор;
- •If (условие_истинно)
- •Операторы динамического распределения памяти (new, delete).
- •Операции динамического распределения памяти.
- •Операции отношения и логические операции. Условная операция. Операции сравнения (Операции отношений)
- •Логические операции.
- •Операция присваивания. Приоритет операций.
- •Определение первичного класса.
- •Определение переменных указателей. Инициализация указателей.
- •Организация списка объектов различного типа. Техническая реализация
- •Параметризованная очередь. Параметризованный стек. Параметризованное бинарное дерево.
- •Int max_len; /* Максимальная длина стека */
- •Int top; /* Индекс элемента в вершине стека */
- •Параметризованный класс двухсвязного списка.
- •58. Перегрузка операций
- •59. Перегрузка для труктур
- •Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.
- •Передача параметра по ссылке
- •Передача структур в функции. Создание массива структур.
- •63. Подставляемые функции (inline-функции).
- •Преобразования указателей на объекты
- •65. Приведите пример использования enum.
- •66. Приведите пример использования inline-функции.
- •67. Приведите пример использования аргументов функций по умолчанию.
- •68. Приведите пример использования арифметических операции с указателями.
- •69. Приведите пример использования виртуальных функций
- •70. Приведите пример использования вызова функций по значению и вызов по ссылке.
- •71. Приведите пример использования дружественных функции.
- •72. Приведите пример использования конструкторов и деструктора.
- •73.Приведите пример использования массива структур.
- •Приведите пример использования перегрузки функций.
- •81. Приведите пример использования указателей и массивов.
- •82. Приведите пример использования условного оператора
- •83.Приведите пример использования циклов for, while, do-while.
- •84. Приведите пример использования шаблонов функций.
- •Принципы организации позднего связывания.
- •Приоритет переменных с файловой и локальной областями действия. Операция уточнения области действия.
- •Производные классы. Доступ к полям и функциям базового класса.
- •88. Простой класс. Вложенные классы
- •Пространство имен. Операторы namespace и using. Пространство имен
- •Прототипы функций. Вызов функций по значению и вызов по ссылке. Область действия. Рекурсия.
- •91.Работа с файлами последовательного и произвольного доступа.
- •92.92.Переменные
- •Где объявляются переменные
- •Локальные переменные
- •Вопрос 95
- •96 Соглашения об именах
- •Тело класса и составные функции.
- •Указатели на массивы. Указатели на строки.
- •Использование указателя на символьную строку
- •Условный оператор. Оператор switch.
- •Формальные и фактические параметры. Массивы в качестве параметров. Аргумент типа void.
- •Способ передачи параметров в подпрограмму
- •110.Циклы for. Циклы while. Циклы do-while. Разница между циклами.
- •Цикл while ("пока") с постусловием
Массивы структур
При необходимости хранения некоторых данных в виде нескольких массивов одной размерности, но разного типа, возможна организация массива структур. Наглядно массив структур можно представить в виде таблицы, где столбцы таблицы представляют собой поля структуры, а строки – элементы массива структур.
Например, имеется два разнотипных массива:
char c[N];
int i[N];
Объявление
struct key
{char c;int i;} keytab[N];
создает тип структуры key и объявляет массив keytab[N], каждый элемент которого есть структура типа key.
Возможна запись:
struct key{char c;int i;};
struct key keytab[N];
Инициализация массива структур выполняется следующим образом:
struct key
{char c;int i;} keytab[]={'a', 0,'b', 0};
В этом примере создается массив на две структуры типа key с именем keytab. Рассмотрим обращение к полю структуры в этом случае – для примера выведем на экран содержимое массива:
for(int i=0;i<2;i++)
printf("%c %d\n",keytab[i].c,keytab[i].i);
При обращении к полю структуры сначала происходит обращение к элементу массива (keytab[i]), а затем только обращение к полю структуры (keytab[i].c).
Доступ к полю элемента массива структур может быть получен через константу-указатель на массив и смещение внутри массива, например, доступ к полю элемента массива с номером i следует записать следующим образом:
(*(keytab+i)).c или (keytab+i)→ c.
Массив структур также может быть передан в функцию в качестве аргумента, передача массива происходит через указатель на массив.
Пример программы, в которой массив точек формируется и выводится на экран с помощью функций:
#include <stdio.h>
#define N 5
struct point
{int x,y;};
void form_mas(struct point* mas, int n)
{printf("Enter koordinates!\n");
for(int i=0;i<n;i++)
{printf("x→");
scanf("%d",&mas[i].x);
printf("y→");
scanf("%d",&mas[i].y);}}
void print_mas(struct point* mas, int n)
{
printf(" x y\n");
for(int i=0; i<n; i++)
printf("%4d %6d\n",(mas+i)→x,(mas+i)→y);
}
int main()
{
struct point Points[N];
form_mas(Points,N);
print_mas(Points,N);
return 0;
}
Функция form_mas() заполняет массив точек, который передан в функцию через указатель mas. Параметр функции n определяет количество элементов массива. Доступ к элементу массива – через операцию . (точка). Выражение &mas[i].x вычисляет адрес элемента структуры mas[i].x, так как операция & имеет более низкий приоритет, чем операции [] и · (точка).
Функция print_mas() выводит массив на экран. Передача массива в функцию происходит также через указатель mas. Параметр n – количество элементов массива. Доступ к элементу массива – через операцию → (стрелка).
26.Класс, объектами которого являются множества.
Таким классом является встроенный в язык класс std::set
Реализует шаблоны классов контейнеров std::set и std::multiset — сортированные ассоциативные контейнеры или множества.
Ассоциативный контейнер set-упорядоченное множество уникальных элементов. При вставке/удалении элементов множества итераторы, указывающие на элементы этого множества, не становятся недействительными. Обеспечивает стандартные операции над множествами типа объединения, пересечения, вычитания. Тип элементов множества должен реализовывать оператор сравнения operator< или требуется предоставить функцию-компаратор. Реализован на основе самобалансирующего дерева двоичного поиска. multiset То же что и set, но позволяет хранить повторяющиеся элементы
Контейнер (container) — хранение набора объектов в памяти.
Итератор (iterator) — обеспечение средств доступа к содержимому контейнера.
Пример:
iterator begin ();
const_iterator begin () const;
Возвращает итератор, указывающий на первый элемент в множестве контейнера.
/ set::begin/end
#include <iostream>
#include <set>
using namespace std;
int main ()
{
int myints[] = {75,23,65,42,13};
set<int> myset (myints,myints+5);
set<int>::iterator it;
cout << "myset contains:";
for ( it=myset.begin() ; it != myset.end(); it++ )
cout << " " << *it;
cout << endl;
return 0;
}
27.Классы (fstream, ofstream, ifstream, ostream, istream, ios) и представители классов потокового ввода-вывода.
Подклассы ofstream, ifstream и fstream объявлены в заголовочном файле
fstream.n и обеспечивают потоки ввода-вывода в дисковые файлы. Эти три класса
предоставляют множество функций для управления вводом и выводом, многие из ко-
торых наследуются от ostream и istream. Полный список этих функций вы можете
найти в документации к компилятору
Класс ofstream, который используется для файлового вывода, имеет несколько
конструкторов; наиболее часто применяется следующий:
ofstream::ofstream(char* pFileName,
int mode = ios::out,
int prot = filebuff::openprot);
Класс ifstream работает для ввода почти так же, как ofstream для вывода, что
и демонстрирует приведенный ниже пример.
#include <fstream.h>
Класс fstream похож на комбинацию классов ifstream и ofstream (кстати, он
и наследуется от обоих этих классов). Объект класса fstream может быть создан как
для ввода, так и для вывода.
Классы istrstream, ostrstream и strstream определены в заголовочном файле
с именем strstrea.h или strstream.h.
Классы из strstream.h позволяют использовать операции, определенные для
файлов в классах fstream, для строк в памяти. Это очень похоже на функции
sprintfO Hsscanf() в С.
