Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектно-ориентированное программирование.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
31.2 Кб
Скачать
  1. Множественное наследование. Достоинство и недостатки.

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

Чтобы устранить дублирование объектов непрямого базового класса при множественном наследовании, этот базовый класс объявляют виртуальным. class X {...}; class Y : virtual public X {...};

Достоинства и недостатки:+ Создается объект с свойствами от других классов.- Сложность, утечки памяти.

  1. Виртуальные методы. Полиморфизм.

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

Цель полиморфизма: использование одного имени для задания общих для класса действий. Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование того же интерфейса для задания единого класса

действий. Ключевым в понимании полиморфизма является то, что он позволяет вам манипулировать объектами различной степени сложности путем создания

общего для них стандартного интерфейса для реализации похожих действий.

  1. Виртуальные методы. Абстрактные классы.

Абстрактный класс является классом, который может использоваться только в качестве базового для других классов. Абстрактный класс содержит одну или несколько чистых виртуальных функций.

Абстрактный класс не может использоваться в качестве типа аргумента функции или типа возвращаемого значения. Абстрактный класс нельзя использовать в явном преобразовании.

Например: class Bird {public: void virtual Sing() = 0; }; //класс Eagle – также абстрактный

class Eagle : public Bird {};// GoldenEagle – не является абстрактным

class GoldenEagle: public Bird {void Sign() {…} };

Важным примером использования абстрактных классов является предоставление интерфейса с полным отсутствием деталей реализации. Например, операционная система может скрыть детали реализации драйверов устройств за интерфейсом абстрактного класса.