Другие языки программирования и технологии

Что такое полиморфизм? на примере С++

Вам нужно создать множество различных плоских фигур для графики, которые обладают общим свойством - площадь, но для каждой отдельной фигуры площадь вычисляется по уникальной формуле. В какой-то момент времени вам нужно постепенно масштабировать все фигуры, допустим увеличив их площадь в два-три раза. Для это вам придётся для каждого типа фигур создавать отдельный массив, чтобы потом вызвать в цикле метод масштабирования. Так как количество различных фигур скорее всего будет разным, то вам придётся для каждого массива писать свой цикл. Если фигуры будут снежинками, то их может быть сотня видов. Сто циклов в программе не есть хорошо! И плохо вдвойне, что масштабироваться они будут не в произвольном порядке, а массив за массивом. А хорошо бы было все снежинки поместить в один массив, в произвольном порядке фигур и затем менять их масштаб случайным образом. Полиморфизм позволяет это сделать. Для чего нужно создать базовый класс в котором определить чистую виртуальную функцию для масштабирования снежинок, а также создать множество производных классов для каждой конкретной снежинки, где переопределить эту чистую виртуальную функцию для конкретной геометрии, как виртуальную. Класс, в котором объявлена хотя бы одна чистая виртуальная функция - называется абстрактный и создать объект такого класса не получиться. Зато можно объявить указатель на базовый абстрактный класс и по этому указателю получить доступ к полям и методам производных классов. Это значит, что можно создавать множество объектов классов, производных от абстрактного и в произвольном порядке заносить их в массив указателей базового класса. Затем в единственном цикле можно менять масштаб фигур. Далее, перейдя по ссылке, увидите более простой пример, на котором легко понять технику этого дела: http://pastebin.com/g5h89kAE
ДА
Даурен Актюбинский
75 926
Лучший ответ
Добавлю: полиморфизм может проявлять себя и без классов. Самый простой пример - сабклассинг/суперклассинг окон в виндовс. Это тоже полиморфизм, но немного с другого угла зрения