- •1. Парадигмы программирования, основные направления в программировании.
- •2.Возникновение ооп
- •Базовые принципы и конструкции ооп
- •4. Особенности процедурного и объектно-ориентированного программирования
- •Основные положения объектной модели и ее преимущества и недостатки
- •Абстрагирование. Модульность. Иерархия. Типизация
- •Максимизация эффективности использования памяти компьютера.
- •11. Использование new и delete для реализации динамических массивов (одномерных и двумерных). Инициализация динамически выделенной памяти.
- •12. Базовые конструкции объектно-ориентированных программ: классы и объекты.
- •13. Концепция, определение, реализация класса. Принцип инкапсуляции. Атрибуты доступа к содержимому класса.
- •14. Инициализация и разрушение объекта. Способы доступа к содержимому класса. Поля и методы класса
- •15. Конструкторы и деструкторы класса. Конструктор по умолчанию
- •32. Сравнение классов и структур. Сравнение классов и объединений
- •18. Организация внешнего доступа к локальным компонентам класса. Встраиваемые методы класса. Использование встраиваемых методов в определении класса.
- •19. Инициализация массивов объектов. Указатель this. Указатели на объекты.
- •Int get_i() {return I; }
- •Int get_h() {return h; }
- •Int main()
- •20. Динамическая и статическая инициализация переменных и объектов.
- •42. Дружественные функции класса. Перегрузка функций и методов. Особенности перегрузки операторов как метода класса и как дружественной функции.
- •24. Создание, особенности использование конструктора копии при передаче объекта в качестве параметра функции, возврате объекта из функции и инициализации объектов.
- •25. Локальные static-переменные. Глобальные static-переменные.
- •27. Использование ключевого слова const при создании переменной и объекта класса. . Константные аргументы и возвращаемые значения методов класса. Вложенные классы.
- •28. Перегрузка операторов для пользовательских типов данных. Перегрузка унарных операторов. Перегрузка бинарных операторов. Особенности использования ключевого слова operator.
- •29. Аргументы перегружаемого оператора. Значения, возвращаемые перегружаемым оператором. Временные безымянные объекты.
- •30. Перегрузка постфиксных операторов. Перегрузка оператора ()
- •Int &operator[](int I) {return a[I];}
- •33. Перегрузка оператора *. Перегрузка оператора присваивания
- •34. Особенности преобразования типов данных. Явные преобразования. Преобразования типов, определенных в программе. Особенности преобразования основных типов в основные типы.
- •35. Особенности использования указателей и ссылок. Ссылки как параметры методов и как возвращаемые значения. Статические и динамические объекты.
- •37. Наследование, базовый и производный классы. Иерархия классов
- •38. Определение производного класса, доступ к содержимому базового класса. Использование конструкторов, полей и методов базового класса.
- •39. Спецификатор доступа protected, недостатки использования спецификатора protected.
- •40. Неизменность базового класса. Конструкторы производного класса. Переопределение методов базового класса.
- •42. Общее, частное и защищенное наследование. Комбинации атрибутов доступа при наследовании. Выбор атрибута доступа при наследовании. Уровни наследования. Множественное наследование.
- •43. Методы классов и множественное наследование. Неопределенности при множественном наследовании и способы её разрешения.
- •44. Конструкторы при множественном наследовании. Конструкторы без аргументов и конструкторы с аргументами при множественном наследовании.
- •45. Связь включения. Классы в классах. Композиция и наследование. Роль наследования при разработке программ.
- •46.Указатели и ссылки на производные типы. Понятие и сравнение раннего связывания с поздним.
- •47. Множественное наследование и виртуальное наследование базовых классов. Использование виртуального механизма для реализации принципа полиморфизма.
- •48. Виртуальные методы класса и механизм их использования. Чисто виртуальные функции и абстрактные базовые классы.
- •49. Виртуальный деструктор. Абстрактные классы их назначение и свойства
- •50. Наследование виртуальных методов. Необходимость применения виртуальных функции. Полиморфизм и пуризм.
- •51. Понятие параметризированных функций. Параметризированные функции с двумя и более обобщенными типами. Перегрузка параметризированной функции.
- •126. Использование стандартных параметров в параметризированных функциях и методах. Особенности использования параметризированных функций и методов.
- •53. Параметризированные классы, методы, их свойства. Явно задаваемые специализации параметризированных классов
- •54. Совместное использование параметризации и принципов наследования.
- •55. Организация внешнего доступа к компонентам параметризированных классов. Параметризированные классы и статические элементы.
- •56. Использование в параметризированных классах аргументов, не являющихся типами. Использование в параметризированных классах аргументов по умолчанию.
- •133. Шаблоны класса и дружественные функции класса. Спецификатор register.
- •61. Причины использования многофайловых программ. Библиотеки классов. Реализация библиотек классов.
- •62. Создание многофайловой программы. Директории в многофайловой программе.
47. Множественное наследование и виртуальное наследование базовых классов. Использование виртуального механизма для реализации принципа полиморфизма.
Множественное наследование позволяет порожденному классу наследовать элементы более, чем от одного базового класса. Синтаксис заголовков классов расширяется так, чтобы разрешить создание списка базовых классов и обозначения их уровня доступа:
class X
{...};
class Y
{...};
class Z
{...};
class A : public X, public Y, public Z
{...};
Класс А обобщенно наследует элементы всех трех основных классов.
Виртуальное наследование базового класса гарантирует, что в любом производном классе будет присутствовать только одна его копия.
Если два (или больше) класса выведены из общего базового класса, мы можем предотвратить включение нескольких его копий в объекте, выведенном из этих классов, что реализуется путем объявления базового класса при его наследовании виртуальным. Для этого достаточно предварить имя наследуемого базового класса ключевым словом virtual.
Полиморфизм – одна из основных составляющих объектно-ориентированного программирования, позволяющая определять в базовом классе методы, которые будут общими для всех классов-наследников, при этом класс-наследник может определять специфическую реализацию некоторых или всех этих методов. Основным инструментом для реализации принципа полиморфизма является использование виртуальных методов и абстрактных классов.
Динамический полиморфизм возможен благодаря сочетанию двух средств: наследования и виртуальных функций.
Класс, который включает виртуальную функцию, называется полиморфным классом. Этот термин также применяется к классу, который наследует базовый класс, содержащий виртуальную функцию.
Виртуальная функция — это функция, которая объявляется в базовом классе с использованием ключевого слова virtual и переопределяется в одном или нескольких производных классах. Таким образом, каждый производный класс может иметь собственную версию виртуальной функции. Интересно рассмотреть ситуацию, когда виртуальная функция вызывается через указатель (или ссылку) на базовый класс. В этом случае C++ определяет, какую именно версию виртуальной функции необходимо вызвать, по типу объекта, адресуемого этим указателем. Причем следует иметь в виду, что это решение принимается во время выполнения программы. Следовательно, при указании на различные объекты будут вызываться и различные версии виртуальной функции. Другими словами, именно по типу адресуемого объекта (а не по типу самого указателя) определяется, какая версия виртуальной функции будет выполнена. Таким образом, если базовый класс содержит виртуальную функцию и если из этого базового класса выведено два (или больше) других класса, то при адресации различных типов объектов через указатель на базовый класс будут выполняться и различные версии виртуальной функции. Аналогичный механизм работает и при использовании ссылки на базовый класс.