- •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.
19. Перегрузка new, delete.
Операции создания и уничтожения объектов динамической памяти можно переопределить след обр.:
Void *operator new (size_f size);
Void operator delete (void *); //void * - указатель на область памяти, //выделяемую под объект
size – размер объекта в байтах, size_t – тип размерности области памяти.
Переопределение этих операций позволяет написать собственное распределение памяти для объектов класса. Операции, не допускающие перегрузку: . (прямойвыбор члена объекта класса), .* (обращение к члену объекта класса, ?: (условная операция), :: (расщирение области видимости), sizeof (размер), # (препроцессорный оператор).
20. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
При работе со стандартными типами данных имеют место явное и неявное преобразования типов. По аналогии для классов могут быть определены такие же операции. Они ассоциируются с конструированием объектов.
“yyy” -> “xxx”
Если в программе встречается преобразование типа класса, то для осуществления этого преобразования необходим конструктор вида xxx (yyy &). Сами преобразования в этих случаях те же, что и обычные преобразования:
при использовании операции присваивания, если она не определяется напрямую;
при использовании явного преобразования;
при неявном преобразовании типа формального параметра функции в случае передачи его по значению;
при неявном преобразовании типа результата функции;
при определении объекта класса xxx и инициализации его объекта класса yyy.
yyy b; xxx a = b;
При конструировании объекта класса yyy должна быть обеспечена доступность данных, например, посредством дружественности.
Рассмотрим преобразование объекта класса dat с базовым типом int и long. Сущность этого преобразования заключается в выполнении полного количества дней в дате, заданной входным объектом long и количество дней в текущем году в этой же дате (заданной int). Для задания этих операций необходимо определить в классе dat переопределяемые операции int и long, которые будут задаваться соответствующими функциями – элементами без параметров.
static int days[] = {0,31,28,31, … }
class dat
{
int day, month, year;
public:
operator int(); //происходит преобразование dat в int
operator long(); //происходит преобразование dat в long
long operator -(dat &p);
//происходит вычисление разности дат в днях
dat();
dat(char *);
};
dat :: operator int()
{
int r; //текущий результат
int i; //счетчик месяца
for(r=0,i=1;i<month;i++)
r+=days[month];
…
}
long dat :: operator – (dat &p)
{
return ((long)(*this)-(long)p);
}
void main()
{
dat a(“17-04-2012”); //задано строкой
dat b; //текущая дата
int c;
long d;
}
21. Неявное преобразование типов.
Неявное преобразование типа происходит при передаче в виде параметра функции по значению, а также при приведении типа результата функции. В качестве примера можно привести неявное преобразование вида целое = вещественное, где при выполнении оператора вещественное значение приводится к целому при возвращении результата в переменную целого типа. Однако для неявного преобразование также необходимо переопределять соответствующие операторы.