- •7)Понятие структурного программирования. Базовые конструкции структурного программирования. Оператор «выражения».
- •8)Операторы ветвления. Условный оператор if. Оператор switch.
- •10)Операторы передачи управления. Оператор goto. Оператор break. Оператор continue. Оператор return.
- •11) Указатели. Инициализация указателей. Операции с указателями. Ссылки.
- •12)Массивы. Динамические массивы. Строки.
- •13)Типы данных, определяемые пользователем. Переименование типов. Перечисление.
- •14)Типы данных, определяемые пользователем. Структуры. Битовые поля. Объединения.
- •15)Функции. Объявление и определение функций.
- •17)Рекурсивные функции. Функция main().
- •18)Перегрузка функций.
- •19)Шаблоны функции.
- •16)Способы обмена данными между функциями. Глобальные переменные. Возвращаемое значение. Параметры функции. Передача массивов в качестве параметров. Параметры со значениями по умолчанию.
- •20)Директивы препроцессора. Директива #include. Директива #define. Директива #undef.
- •21)Директива препроцессора. Директивы условной компиляции.
- •22)Основные свойства объектно-ориентированного программирования. Понятие класса.
- •23)Классы. Описание класса. Описание объекта. Константные методы. Указатель this.
- •24)Конструкторы. Конструктор копирования. Статические элементы класса.
- •25)Деструкторы. Дружественные функции и классы.
- •26)Перегрузка операций. Перегрузка бинарных и унарных операций.
- •27)Перегрузка операций. Перегрузка операции присваивания. Перегрузка операции приведения типа. Перегрузка операции индексирования.
- •28)Наследование. Ключи доступа к элементам базового класса. Простое наследование.
- •29)Виртуальные методы. Механизм позднего связывания.
- •30)Абстрактные классы. Множественное наследование.
- •31)Шаблоны классов. Создание шаблонов. Использование шаблонов класса.
- •35)Форматирование данных при вводе - выводе в поток. Флаги и манипуляторы.
- •38)Модель программирования для os Windows. Механизм обработки сообщений в Windows. Группы сообщений.
29)Виртуальные методы. Механизм позднего связывания.
Указателю на базовый класс можно присвоить значение адреса объекта любого производного класса
monstr *p;
p=new daemon;
virtual void draw(int, int, int, int);
- если в базовом классе метод определен как виртуальный, то метод, определенный в производном классе с тем же именем и набором параметров, автоматически становится виртуальным
- виртуальные методы наследуются
- виртуальный метод не может объявляться с модификатором static
- если вводится описание виртуального метода, он должен быть определен хотя бы как чисто виртуальный (virtual void func(int)=0;)
таблица виртуальных методов класса X(vtbl)
virtual func1()
virtual func2()
virtual func3()
объект класса X
void *vtpr;
30)Абстрактные классы. Множественное наследование.
Абстрактный класс – класс, содержащий хотя бы один чисто виртуальный метод.
Правила:
- нельзя использовать при явном приведении типов, для описания типа параметра и типа возвращаемого значения
- допускается создавать указатели и ссылки на абстрактный класс
- если производный от абстрактного класс, не определяет все чисто виртуальные функции, то он тоже становится абстрактным
Множественное наследование означает, что класс имеет несколько базовых классов:
class A; class B;
class C: public A, public B {};
class A{int count;};
class B{int count;};
class C: public A, public B
{void func()
{count<<A::count;
count<<B::count;}
class A
class B class C
class D
class A{int commonField};
class B: virtual public A{};
class C: virtual public A{};
class D: public B, public C{};
31)Шаблоны классов. Создание шаблонов. Использование шаблонов класса.
Динамические структуры данных.
типы динамических структур:
- линейные списки
- очереди
- стеки
- бинарные деревья
узел – элемент динамической структуры
class Node
{Type d;
Node *p};
Линейные списки.
однонаправленный список – ссылки (связь) только на следующие элементы
двусвязный список – ссылки (связь) на следующие и на предыдущие элементы
кольцевой список – последний элемент связан с первым
Операции над списками:
- начальное формирование (создание первого элемента)
- добавление элемента в конец списка
- чтение элемента с заданным ключом
- вставка элемента в заданное место списка (до или после элемента с заданным ключом)
- удаление элемента с заданным ключом
- упорядочивание списка по ключу
Шаблоны (параметризованные классы) – позволяют создавать семейства родственных классов, которые можно применять к любому типу данных и передавать этот тип в качестве параметра класса
template <параметр шаблона> определение класса
Правила описании шаблонов:
- локальные (вложенные в шаблон) классы не могут содержать шаблоны в качестве своих аргументов
- шаблоны классов могут содержать статические элементы, дружественные функции и классы
- шаблоны могут быть производными, как от шаблонов, так и от классов, и являться базовыми для них
- внутри шаблона нельзя определять дружественные шаблоны
имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)]
List <int> list1;
List <double> list2;
list1.add(2);
list2.print;
32)Общий механизм обработки исключений в С++. Генерация и перехват исключений. Список исключений функции.
Исключительная ситуация – это возникновение непредвиденного или аварийного события, которое может порождаться некорректным использованием аппаратуры.
Механизм исключений С++ предназначен для событий, которые происходят в результате работы самой программы.
Вычислительный процесс
обнаружение обработка
аварийной аварийной
ситуации ситуации
Механизм обработки
исключений:
Стек
– область памяти, выделяемая системой
для программы, в которой хранятся
параметры, локальные переменные функций
и адреса возврата в функцию
Стек вызова – последовательность вызванных, но еще не завершившихся функций
Раскручивание стека – процесс освобождения памяти из-под локальных переменных и возврата управления вызывающей функции
Синтаксис исключения:
try
{код, который может генерировать исключение}
throw [выражение];
catch (тип имя) {тело обработчика}
catch (тип) {тело обработчика}
catch (…) {тело обработчика}
Перехват исключений.
Действия библиотеки С++ в случае генерации исключения:
1)создается копия параметра throw в виде статического объекта, который существует до тех пор, пока исключение не обработано
2)в поисках подходящего обработчика раскручивается стек; вызываются деструкторы локальных объектов, выходящих из области
3)объект исключения передается обработчику, имеющему параметр, совместимый по типу
Обработчик считается найденным, если тип объекта указанного после throw:
- тот же, что и в catch
- является производным от указанного в catch
- является указателем, который может быть преобразован по стандартным правилам к указанным в catch
Список исключений:
void f1() throw(int, char*)
{тело функции}
void f2() throw()
{тело функции не порождающий исключений}
Исключения в конструкторах:
class Vector
{public:
const int max=200;
Vector(int n)
{if(n<0 || n>max) throw “invalide size”;
…}…};
try
{… Vector *p=new Vector(400);…}
catch(char*) {}
33)Пространства имен. Состав стандартной библиотеки С++.
Пространство имен (поименованные области) служат для логического группирования объявлений и ограничения доступа к ним.
namespace [имя_области] {/*объявления*/}
namespace demo
{int i=1; int k=0;
void func(int);
void func2(int) {/*…*/}}
void demo::func(int) {/*…*/}
demo::i=100;
demo::func2(10);
using demo::i; //после можно испольжовать напрямую
using namespace demo;
Стандартная библиотека С++:
- функции, макросы и константы, унаследованные из библиотеки Си.
- классы, шаблоны и другие средства С++
группы классов:
- потоковые (управление потоками данных между оперативной памятью и внешними устройствами)
- строковые (работа с символьными строками)
- контейнерные (реализуют наиболее распространенные структуры для хранения данных)
- итераторы (унифицированный доступ к элементам контейнерных и других классов)
- математические (эффективная обработка массивов с плавающей точкой и работа с комплексными числами)
Стандартная библиотека шаблонов – совокупность контейнерных классов и итераторов.
34)Потоковые классы стандартной библиотеки С++.
извлечение – извлечение данных из потока
помещение – вывод в поток
По направлению обмена:
- входные
- выходные
- двунаправленные
По виду устройств, с которыми работает поток:
- стандартные
- файловые
- строковые
Иерархия потоковых классов:
ios streambuf
istream ostream
iostream
Стандартные потоки.
istream cin; ввод (клавиатура)
ostream cout; вывод (экран)
ostream cerr; сообщения об ошибке
ostream clog; диагностическое сообщение
В классах istream и ostream определены операции извлечения из потока (<<) и помещение в поток (>>).
- числовые значения можно вводить в десятичной или шестнадцатеричной системе счисления
- вещественное число вводится с точкой или с порядком
- при вводе строк извлечение происходит до ближайшего пробела
- значение указателей выводится в шестнадцатеричной системе счисления
Методы обмена:
get – возвращает код извлеченного из потока символа
getline – считает из потока строку, плюс пробельные символы
read – считывает определенное количество байтов
seekg – устанавливает текущую позицию чтения
put – выводит в поток символ
write – записывает в поток необходимое количество байтов
