Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_ekzamenu_OOP.rtf
Скачиваний:
4
Добавлен:
24.09.2019
Размер:
526.36 Кб
Скачать
  1. Базовые классы. Классы и члены. Особенности применения и ООП. Примеры.

  2. Принципы ООП. Перечислите и дайте характеристику каждому принципу. Примеры.

  3. Получение доступа к членам класса. Ограничение доступа к членам класса, зачем это необходимо. Примеры.

  4. Определение методов класса. Конструкторы и деструкторы. Конструкторы-копировщики. Примеры.

  5. Перегрузка функций-членов. Примеры.

  6. Указатель this. Особенности существования и использования. Примеры.

  7. Перегрузка операторов. Операторы преобразований. Примеры.

  8. Наследование. Плюсы и минусы применения. Пути решения проблем множественного наследования. Примеры.

  9. Функции — друзья. Отличия в применении и написании от функций-членов и внешних функций. Примеры.

  10. Инициализация наследуемых классов. Передача параметров конструктору базового класса. . Примеры.

  11. Потоки ввода-вывода. Переопределение потоков. Иерархия потоков. Примеры.

  12. Управление выводом данных. Наличия функций-методов и флагов ввода-вывода. . Примеры.

  13. Использование файлов для ввода- вывода информации. . Примеры.

  14. Виртуальные методы. Полиморфизм как принцип ООП. Примеры.

  15. Как работают виртуальные функции. Примеры.

  16. Абстрактные классы. Необходимость в чисто-виртуальных функциях. Примеры.

  17. Статические переменные-члены и статические функции-члены. Применение и использование. Примеры.

  18. Шаблоны функций .Написание и особенности применения. . Примеры.

  19. Шаблоны классов. Описание особенности применения. Примеры.

  20. Связные списки и другие структуры. Примеры.

  21. Указатели на классы и виртуальные функции. Примеры.

  22. Экземпляризация классов и функций из шаблонов. Примеры.

  23. Передача в функции объектов класса. Решение проблемы вызова конструктора и деструктора при работе локальных функций. Примеры.

  1. 21. Виртуальный метод (виртуальная функция) — в объектно-ориентированном программировании метод (функция) класса, который может быть переопределён вклассах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Таким образом, программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.

  2. Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом базовый класс определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа. В некоторых языках программирования, например в Java, нет понятия виртуального метода, данное понятие следует применять лишь для языков, в которых методы родительского класса не могут быть переопределены по умолчанию, а только с помощью некоторых вспомогательных ключевых слов. В некоторых же (как, например, в Python), все методы — виртуальные.

  3. Базовый класс может и не предоставлять реализации виртуального метода, а только декларировать его существование. Такие методы без реализации называются «чистыми виртуальными» (перевод англ.  pure virtual) или абстрактными. Класс, содержащий хотя бы один такой метод, тоже будет абстрактным. Объект такого класса создать нельзя (в некоторых языках допускается, но вызов абстрактного метода приведёт к ошибке). Наследники абстрактного класса должны предоставить реализацию для всех его абстрактных методов, иначе они, в свою очередь, будут абстрактными классами.

  4. Для каждого класса, имеющего хотя бы один виртуальный метод, создаётся таблица виртуальных методов. Каждый объект хранит указатель на таблицу своего класса. Для вызова виртуального метода используется такой механизм: из объекта берётся указатель на соответствующую таблицу виртуальных методов, а из неё, по фиксированному смещению, — указатель на реализацию метода, используемого для данного класса. При использовании множественного наследования или интерфейсовситуация несколько усложняется за счёт того, что таблица виртуальных методов становится нелинейной.

                  1. Пример виртуальной функции на C++

  5. Пример на C++, иллюстрирующий отличие виртуальных функций от невиртуальных:

  6. class Ancestor

  7. {

  8. public:

  9. virtual void function1 () { cout << "Ancestor::function1()" << endl; }

  10. void function2 () { cout << "Ancestor::function2()" << endl; }

  11. };

  12. class Descendant : public Ancestor

  13. {

  14. public:

  15. virtual void function1 () { cout << "Descendant::function1()" << endl; }

  16. void function2 () { cout << "Descendant::function2()" << endl; }

  17. };

  18. Descendant* pointer = new Descendant ();

  19. Ancestor* pointer_copy = pointer;

  20. pointer->function1 ();

  21. pointer->function2 ();

  22. pointer_copy->function1 ();

  23. pointer_copy->function2 ();

  1. Указатели на функции

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]