Вопрос C++. Зачем определять чистую виртуальную функцию?

Регистрация
4 Ноя 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Вычитал, что в C++ допустимо определять чистую виртуальную функцию, без подробностей. Нифига не понял. Кто-то может прояснить ситуацию? Т. е. у производного класса от АБК будет это определение?
 
Для реализации полиморфизма, в этом суть ООП. Например, есть абстрактный класс Shape (фигура) с чистым методом area() (площадь фигуры). Непонятно, что за площадь у абстрактной фигуры, поэтому здесь функция не определена. И есть наследники, конкретные фигуры с имплементацией area(): Circle, Square, Rhomb, Triangle, .. Допустим, я создал круг: Shape shape = new Circle(); И дальше вызываю везде, где мне нужно shape.area() хотя 1000 раз. Но вдруг, узнается, что мне нужен не круг, а квадрат. Мне не потребуется для этого заново переписывать 1000 строк кода, а будет достаточно только одной: Shape shape = new Square(); Если, например, я работаю с коллекцией, то могу задать ее через абстрактный класс List List collection = new ArrayList() // Обычный массив Но вдруг понял, что мне необходим связный список, тогда одно движение List collection = new LinkedList() и вуаля, 1 секунда и готово.
 
любой модуль представляет собой черный ящик, то есть мы не знаем как он реализован, но он предоставляет нам API. API это набор интерфейсов и фабрик. почитай что такое интерфейсы javarush.ru/groups/posts/1981-dlja-chego-v-java-nuzhnih-interfeysih как они реализуются в плюсах qaru.site/questions/4041/how-to-implement-interfaces-in-c обязательно посмотри шаблоны проектирования. они общие для большинства языков. статей много, например здесь habr.com/ru/post/210288/
 
>> Зачем определять чистую виртуальную функцию? для механизмов наследования что бы заставить наследников реализовывать методы и избегать ошибок ожидаемых но не реализованных методов.
 
Да, чистая виртуальная функция обязательно должна быть переопределена. Если в классе есть хотя бы одна такая функция, нельзя создать объект этого класса. Например, можно создать класс "Геометрическая Фигура". У него есть чисто виртуальный метод "Нарисовать". Он чисто виртуальный, поскольку разные геометрические фигуры отображаются по-разному. В других языках есть ещё есть интерфейсы. Интерфейс - это подобие класса, в котором есть только чисто виртуальные функции.
 
Назад
Сверху