Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OTVETY_K_EKZAMENU_PO_OOP.doc
Скачиваний:
10
Добавлен:
01.07.2025
Размер:
239.62 Кб
Скачать

26. Абстр-ые классы. Чисто вирт-ые функции.

Механизм абстр-ых класов служит для представления абстр-ых понятий. Абстр-ый класс можно также употреблять как определение интерфейса, для которого производные классы обеспечивают разнообразие реализаций. Чистая вирт функция — функция, кот не реализована и используется только для создания абстр-ого класса. Ее синтаксис: virtual тип имя функции(парамы) = 0; Абстр-ый класс - класс, содержащий хотя бы одну чистую вирт-ую функцию. Создание объекта абстр-ого класса невозможно, но все остальные манипуляции с типом разрешаются. Чтобы произ от абстр-ого класс избавился от качества абстракции необходимо в нем переопределить все чистые вирт-ые функции. В противном случае этот произ класс также останется абстр-ым. Абстр-ые классы очень часто находятся близко к началу иер-и. Пример использования абстр-ого и производного к нему класов: class abstract {public: abstract() {}; virtual ~abstract() {}; virtual void draw 0=0; }; class hello: public abstract {public: virtual void draw() {cout<<".."<<endl; }; };

27. Множвеное насл-е. Сравнение множвеного насл-я с одиночным.

В C++ класс может быть порожден из любого числа базовых класов. Для порождения нового класса от нескольких базовых класов используется следующая форма записи: class имя класса: public|protected|private имя баз класа1, public | protected | private имя баз класа2 и т.д. {объявления членов}. В этом случае объект производного класса будет содержать поля всех базовых класов плюс поля своего класса. Наличие нескольких непосредственых базовых класов назется множвеным насл-ем (multiple inheritance). Класс не может быть задан в качестве непосредственого баз класса более одного раза, но он может быть более одного раза косвеным базовым класом. Класс не может появляться дважды в списке базовых класов, т.к. каждая ссылка на него была бы неоднозначна. Сравнение: Насл-е св-в только одного баз класса назется одиночным (простым) насл-ем, а паралёльное насл-е св-в сразу нескольких- базовых класов назется множвеным (кратным) насл-ем.

28. "Правильное" множвеное насл-е. Понятие интерфейса.

Употребление множвеного насл-я может привести к излишней сложности и взаимосвязи класов. Множвеное насл-е - лучший и безопасный путь определения класов протокола. Класс протокола или интерфейс - класс, состоящий из чисто вирт-ых функций и не содержащий даных. 0тсутствие членов даных в базовом класе полностью устраняет наиболее известные проблемы, связаные с исп-нием множвеного насл-я. Так в производном класе должен быть только один баз класс, содержащий даные, в то время как все остальные базовые классы должны быть интерфейсами.

Предпочтительно использовать соответствующий контейнерный класс (т.е., класс, предназначеный для хранения произвольного кол-ва эл-тов не обязательно одинакового типа, обеспечивая доступ к эл-там по их номеру, а также дополнительные возможности, такие как сортировка, поиск, вставка новых эл-тов, удаление эл-тов и др.). При разработке класса желательно: 0бъявление класса должно обеспечивать клиента информацией, необходимой для успешной работы и ни какой др; Методам должна быть доступна вся информация, необходимая для выполнения их обязаностей, и никакая другая. Представление об объекте - интерфейс.(interface), оно описывает как объект взаимодействует с внешним миром. 0братная сторона объекта связана с его реализацией (implementation). Юзеру разрешен доступ только к тому, что описано в интерфейсной части. Реализация определяет, как достигается выполнение обязаностей, заявленых в интерфейсной части.