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

5.Виртуальные функции.

Механизм, использование которого демонстрирует полиморфизм. Пример: представим, что у нас есть класс и его наследник. При этом и в наследнике и в базовом классе существует функция Plus(параметры) с одинаковыми параметрами. Также в отце есть функция, которая во время своей работы вызывает функцию Plus(). И если мы во время работы вызовем вторую функцию отца, та в свою очередь станет вызывать функцию Plus() отца, так как у нее нет доступа к функциям сына. Но, благодаря виртуальным функциям мы можем сделать так, чтобы она вызвала функцию сына, а не отца. Для этого нужно добавить ключевое слово virtual перед именем функции Plus() как при описании ее в отце, так и при описании ее в сыне. Тогда будет вызываться функция сына, а не отца. Получается, что мы заместили функцию отца функцией сына.

Переопределить-заместить виртуальные функции можно только в наследниках класса, в котором прописаны эти виртуальные функции. Замещающие функции должны иметь тот же список параметров, что и замещаемая функция, при этом виртуальные функции могут замещать невиртуальные функции базового класса. Очень важно, что при объявлении в некотором классе функции виртуальной, в классах-потомках, переопределяющих эту функцию, она также будет виртуальной, но только если она имеет тот же список параметров. Если переопределяющая функция в классе потомке имеет другой список параметров, то ее версия из базового класса будет не доступна классу потомку и всем его потомкам.

Виртуальные функции могут быть объявлены чистыми:

Virtual тип имя (параметры) = 0;

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

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

Существует возможность объявлять ссылки на абстрактные классы. Введение в С++ абстрактных классов позволяет строить иерархию классов более чётко.

6.Восходящий подход программирования.

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

Основная проблема в том, что каждый модуль в отдельности может правильно работать, но при этом терять свою работоспособность при включении в общий проект. Одной из таких ситуаций является изменение ТЗ в ходе выполнения проекта. Также могут встретиться случаи разных интерпретаций ТЗ программистами. Иногда не учитываются на этапе разработки возможные ошибки пользователей или особенности реальных данных. Другой проблемой является концентрация трудностей на последних этапах работы над проектом в условиях острой нехватки времени. В таких случаях применяются следующие решения:

1)Вносятся изменения в уже написанные модули.

2)Перепрограммируется большая часть модулей.

3)Вносятся изменения в ТЗ, чтобы оно соответствовало готовой программе.

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