- •1. Объектно-ориентированное программирование (oop). Объектно-ориентированная технология (oot) программирования.
- •2. Свойства оор.
- •3. Объектно-ориентированный подход (ооп). Определение составляющих объектного подхода: ооа, ood, оор.
- •4. Компоненты оор.
- •5. Объект. Основные понятия: определение объекта, его состояние, поведение, индивидуальность. Взаимодействие объектов. Отношения между объектами.
- •6. Класс. Отношения между классами. Классификация. Методы классификации.
- •7. Вопросы качества абстракция и выбора операций при создании классов и объектов.
- •9. Ссылки и параметры-ссылки. Объявления переменных.
- •10. Встраиваемые функции. Операции new и delete.
- •11. Функции-члены и данные-члены.
- •12. Интерфейсы и реализация.
- •13. Конструкторы и инициализация. Конструктор без параметров (по умолчанию). Конструктор копирования.
- •14. Деструкторы и очистка.
- •Статические члены: функции и данные.
- •16. Структуры и объединения.
- •17. Константные члены-функции и константные объекты.
- •18. Дружественные функции и перегрузка операций.
- •19. Перегрузка new, delete.
- •Void *operator new (size_f size);
- •Void operator delete (void *); //void * - указатель на область памяти, //выделяемую под объект
- •20. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
- •22. Друзья-функции и друзья-классы
- •24. Производные классы. Базы прямые, непрямые
- •25. Конструкторы, деструкторы и наследование
- •26. Множественное наследование
- •27. Виртуальные базовые классы. Иерархия классов. Виртуальные функции
- •Virtual void draw();
- •Void draw();
- •28. Полиморфизм
- •29. Абстрактные классы и чистые виртуальные функции.
- •30. Заголовочные файлы. Предопределенные объекты и потоки.
- •31. Операции помещения и извлечения. Манипуляторы
- •Int main()
- •33. Конструкторы файловых потоков. Ввод-вывод в файлы.
- •34 Параметризированные типы и функции
- •35 Шаблоны функций. Параметры шаблонов. Шаблоны классов
- •36. Контейнеры. Итераторы
- •37. Использование assert, кодов возврата, сигналов, setjmp и longjmp.
- •38. Объектно-ориентированная обработка исключений. Применение try, catch, throw.
14. Деструкторы и очистка.
Деструктор — это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:
- для локальных объектов — при выходе из блока, в котором они объявлены;
- для глобальных — как часть процедуры выхода из main;
- для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.
Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса. Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор. Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически — иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.
Деструктор:
- не имеет аргументов и возвращаемого значения;
- не может быть объявлен как const или static;
- не наследуется;
- может быть виртуальным.
Деструктор должен выглядеть так:
monstr::~monstr() {delete [] name;}
Статические члены: функции и данные.
Если переменная объявлена как static, то компилятор выделяет ей, как и глобальной переменной, постоянное место в памяти. Значение этой переменной сохраняется между вызовами блоков программы, в которых она объявлена(нестатические локальные переменные между вызовами функций уничтожаются).
Отличие от глобальной в том, что она доступна только в своём блоке кода(функции или файле). Применяется, например, при вызовах COLLBACK функций ,которые вызываются при поступлении в приложение сообщений. При этом значения переменных объявленных static, сохраняются. Все другие переменные необходимо заново инициализировать. Если объявить переменную-член класса как статическую, то компилятор создаст для всех объектов один общий экземпляр этой переменной. Эта переменная не будет копироваться для всех объектов данного класса, как это происходит для нестатических членов.
Небольшой пример:
for(int i = 0; i<10; i++){
static int j;
j++; cout<<j<<' ';
}
Мы объявили статическую переменную j. Если убрать слово static, то j бы заново инициализировалась при каждой новой итерации.
В классах - это что-то типа глобальной переменной. Она (переменная) принадлежит всему классу, а не отдельным его объектам.
16. Структуры и объединения.
Тип «структуры» - набор элементов различных типов. Пример в C++:
struct <имя_типа_структура>
{
t1 p1, t2 p2, …, tn pn;
};
t1 … tn – имена типов данных;
p1 … pn – имена проектированных функций (полей структуры).
Два структурных типа будут являться разными типами даже если у них одинаковые поля.
Тип объединения реализует математическую операцию объединения множеств. Объединение – структура, у которой в любой момент времени существует значение только одного из компонент (все компоненты по одному и тому же адресу). Поэтому при хранении объектов объединения достаточно лишь выделить память под максимальный компонент:
union <имя_типа_объекта> {t1 p1; … ; tn pn;};
В C++ обращение к инжектированным функциям и функциям get осуществляется так же, как и к полям структуры. При использовании объединений необходимо отслеживать текущий тип значения, например, посредством дополнительного параметра.